无名管道和有名管道

无名管道:

无名管道创建:int pipe(int filedis[2]);

    当一个管道建立时,它会创建两个文件描述符:

      filedis[0] 用于读管道,

      filedis[1] 用于写管道


管道用于不同进程间通信。通常先创建一个管道,再通过fork函数创建一个子进程,该子进程会继承父进程所创建的管道



有名管道:

有名管道又称为FIFO,是进程间通信的一种方式。FIFO具有以下特点:
          1.全双工的通信模式,数据先进先出;
          2.可以用于任意的进程之间,通过指定相同的管道文件进行通信;
          3.文件名存在文件系统中,而管道中的内容存在于内存中。可通过open、read、write对其操作;

虽然FIFO文件存在于文件系统中(可供不同的进程打开),但FIFO中的内容都存放在内存中,所以文件大小始终为0。


最后总结一下在使用FIFO时要注意的问题:
        1. 在用open打开FIFO时有可能会阻塞,原因就是当前只有读端或写端存在。换句话说,如果程序在打开FIFO时指定了只读方式/只写方式,那么该进
程对于打开的FIFO来说就是一个读端/写端。如果指定的是读写方式,那么进程既是读端又是写端。
        2. 从FIFO中读数据时(用read函数),如果没有数据,默认是阻塞等待,直到有数据被写入FIFO。如果read函数返回0,说明该FIFO所有的写端都已关
闭,程序要做相应的处理。
            向FIFO写入数据时(使用write函数),如果FIFO有足够空间,write函数会返回写入的字节数;如果空间不够,write函数会阻塞,直到写完为止。当所
有的读端都关闭时,再向FIFO写数据会出错。内核会向写进程发管道断裂的信号(SIGPIPE), 从而终止该进程。处理的办法有两种:程序以读写方式打开
FIFO或是在程序中捕捉SIGPIPE信号,由用户自行处理。

FIFO文件在使用上和普通文件有相似之处,但是也有不同之处:

Ø  读取fifo文件的进程只能以”RDONLY”方式打开fifo文件。

Ø  写fifo文件的进程只能以”WRONLY”方式打开fifo

Ø  fifo文件里面的内容被读取后,就消失了。但是普通文件里面的内容读取后还存在。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值