UNIX环境高级编程:进程管理和通信
从终端输入的字符不可能达到守护进程,守护进程中用常规的方法(如printf)输出的字符也不可能在终端上显示出来。所以,文件描述符为0、1和2的三个文件(对应标准输入、标准输出和标准错误这三个流)已经失去了存在的意义,也应被关闭。 启动: 在Linux系统启动时从启动脚本/etc/rc.d中启动,由作业规划进程crond启动 用户终端(通常是 shell)执行。 进程间的通信 AT&T的贝尔实验室,对Unix早期的进程间通信进行了改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内 BSD(加州大学伯克利分校的伯克利软件发布中心),跳过了该限制,形成了基于套接字(socket)的进程间通信机制 传统的进程间通信方式 无名管道(pipe) 有名管道(fifo) 信号(signal) System V IPC对象 共享内存(share memory) 消息队列(message queue) 信号灯(semaphore) BSD 套接字(socket) UNIX IPC(InterProcess Communication) 无名管道pipe 特点: 只能用在有血缘关系的进程之间的通信、半双工(单方向的数据)。 类似于文件IO的读写,只存在于内存中。 创建: #include <unistd.h> int pipe( int fd[2] // fd:包含两个元素的整型数组( fd[0]固定用于读管道,而fd[1]固定用于写管道。) ); 返回值 成功:0, 出错:-1. pipe总结: 读端: 写端存在 管道中有数据,返回读取的字节数。 无数据,阻塞到有数据。 写端不存在 管道中有数据,返回读取的字节数。 无数据,返回0,所以,read返回0意味着写端关闭了。 写端: 读端存在 空间足,返回写入的字节数。 空间不足,有多少写多少,直到写完返回。 读端不存在 进程被SIGPIPE信号终止。 有名管道(FIFO) 特点: 类似队列、全双工(可读可写) 有名管道可以使互不相关的两个进程互相通信。有名管道可以通过路径名来指出,并且在文件系统中可见 进程通过文件IO来操作有名管道 有名管道遵循先进先出规则 不支持如lseek() 操作 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |