【发布时间】:2019-11-29 11:20:49
【问题描述】:
我正在尝试理解 Linux 中的管道。编写了一个基本代码,它将尝试两次写入文件描述符的写入端,然后执行两次读取。在第二次读取时,它被阻塞了。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
int filedes[2];
char buffer1[] = "hello pipe1";
char buffer2[] = "hello pipe2";
char readbuffer[30] = {};
if (pipe(filedes) == 0) {
printf("Pipe successful\n");
printf("read from %d, write to %d\n", filedes[0], filedes[1]);
write(filedes[1], buffer1, sizeof(buffer1));
perror("write");
write(filedes[1], buffer2, sizeof(buffer2));
perror("write");
read(filedes[0], readbuffer, sizeof(readbuffer));
printf("read:%s\n", readbuffer);
read(filedes[0], readbuffer, sizeof(readbuffer));
printf("read:%s\n", readbuffer);
close(filedes[1]);
close(filedes[0]);
} else {
perror("pipe failed");
}
return 0;
}
我得到输出为“hello pipe1”,然后在第二次读取时调用它阻塞 第二个缓冲区数据发生了什么。是不是丢了?
【问题讨论】:
标签: c linux operating-system pipe ipc