#include <unistd.h>
#include <stdio.h>
int main()
{
char buff[100];
int pfd[2];
buff[0] = '\0';
pipe(pfd);
if (fork())
write(pfd[1],"hello world", 12);
fork();
read(pfd[0], buff, 100);
printf("%s\n", buff);
printf("goodbye\n");
}
Run Code Online (Sandbox Code Playgroud)
我知道只有一个进程会写入管道,但我不明白的是,一个进程是否有可能从管道中读取数据并仅读取“hello world”的一部分,而其他进程读取其他部分“你好世界”?
换句话说,当一个进程尝试读取管道而另一个进程正在读取它时会发生什么?
实际上,如果它们从同一个管道读取,那么它们将持有指向内核中相同管道的文件描述符。struct file这意味着内核将决定谁获取数据。只有一个进程会读取任何给定的字节。
大多数对管道的读取和写入都有一些关于 的保证PIPE_BUF,您可能想研究一下。