多个进程读写pipe

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
    int fifofd = mkfifo("./bbb", S_IRUSR|S_IWUSR);
    cout<<"fifofd:"<   #1
    int fd4 = open("./bbb", O_RDONLY);  ------------------------------->   #1
    sleep(10);
    char buf[100];
    memset(buf, 0, 100);
    cout<<"read size:"< #1
    int fd2 = open("./bbb", O_WRONLY); --------------------------------> #1
    write(fd1, "fd1", 4); ---------------------------------------------》#2
    write(fd2, "fd2", 4);-------------------------------------------------------------》#2

    }
    int status;
    wait(&status);
}
结果:
fifofd:-1
read size:4
fd1
read size:4
fd2

注:
如果第一个读端读取8个字节,则输出如下:
fifofd:-1
read size:8
fd1
read size:0
说明: #1: 有名管道的读与写端的打开必须成对,意思是当写端或读端打开时,会暂时阻塞, 等待另一端打开再执行。
       #2: 多个写进程可以写一个pipe,(内容逻辑上是分隔的),读时即便读了多个写进程的数据,有效的仍是第一个写进程的数据,
            如何知道每个写进程写了多少数据,再分别用每个读进程按每个写进程写入的数据量来读取,则会正确的读到数据。

你可能感兴趣的:(杂项)