有名管道
有名管道的特点:
(1):也是一个半双工的通信模式
(2):可以实现互不相关的两个进程的通信,也可以实现有亲缘关系的两个进程的通信。
(3):该管道可以通过路径名来指出,在文件系统中是可见的。
(4):FIFO严格地遵循先进先出规则,不支持lseek()等文件定位操作。
有名管道的读写进程阻塞情况:
(1):缺省情况下,如果当前FIFO内没有数据,读进程将一直阻塞到有数据写入或是FIFO写端关闭。
(2):只要FIFO有空间,数据可以被写入。若空间不足,写进程会阻塞。
有名管道的创建:
创建函数:mkfifo("./管道文件名“,文件权限)函数,成功:返回0,失败:返回 -1。
打开创建的管道文件名:open("管道文件名",文件权限),成功:返回0,失败:返回-1。
进行读写操作:read(),write();
关闭管道文件:close()函数;
实现不同进程间的相互通信的完整代码。
写进程程序代码:
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
pid_t pid = fork();
if(pid < 0)
{
perror("fork error!");
return -1;
}
if(pid > 0)
{
int ret = mkfifo("./text2.fifo",0666);