进程间的通信IPC-命名管道fifo

进程间的通信IPC-命令管道fifo

命名管道fifo与匿名管道pipe区别
fifo:可以用于无血缘关系的进程间的通信,是存在的文件(虽然fifo管道文件为0,不占用磁盘空间,文件属性p-管道文件)
pipe:只能用于存在血缘关系的进程间的通信

1.命名管道fifo的创建:
1.1.命令:mkfifo fifoname
1.2.函数:int mkfifo(const char *pathname, mode_t mode);
参数:pathname:创建的fifo文件名,mode:文件权限;
最终创建出来的fifo文件的权限为mode & ~umask(umask为0002时(命令umask可以查看当前系统的umask码值);mode传00700,创建出来的文件权限是prwx------;p表示管道文件)
头文件:#include <sys/types.h> #include <sys/stat.h>
返回值:成功返回0;失败返回-1

2.命名管道fifo的读写和普通文件相同,涉及函数
int open(const char *pathname, int flags);
flags:O_RDONLY 只读、O_WRONLY 只写、O_RDWR 读写
对于普通文件还存在一个若文件不存在则创建O_CREAT(flags:O_CREAT|O_WRONLY)(管道文件应该不能这样创建)
ssize_t read(int fd, void *buf, size_t count); 将管道的数据读到sRcvStr中(将管道中的现有数据全部读出来)
ssize_t write(int fd, const void *buf, size_t count); 将sSndStr中的数据写入到管道中
int close(int fd);关闭管道

3.命名管道fifo特点:
命名管道fifo和匿名管道pipe都具有相同的特点:管道中的数据只能一次读取,不能重复读取,当数据被读取之后,变不会存在于管道中了。
命名管道可以存在多个读端一个写端,注意:多个读端进行读取时,当A读端将数据1读取后,B读端将读取不了数据1,原因:管道中的数据仅能被读取一次。
命名管道可以存在多个写端一个读端。

4.unlink()删除文件
int unlink(const char *pathname);//删除指定的文件
参数:pathname:指定需要删除的文件路径
返回值:成功返回0;失败返回-1
函数功能:执行unlink()函数并不一定会真正的删除文件,它先会检查文件系统中此文件的连接数是否为1,如果不是1,说明此文件还有其他链接对象,因此只对此文件的连接数进行减1操作。若连接数为1,并且在此时没有任何进程打开该文件,此内容才会真正地被删除掉。在有进程打开此文件的情况下,则暂时不会删除,直到所有打开该文件的进程都结束时文件就会被删除。(连接数是指硬链接数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值