我使用以下代码为 IPC 编写了以下代码pipe()
:
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
int main(void) {
char message_buffer[15] = "Hello World \n";
char read_buffer[15];
int fd[2];
int return_value = pipe(fd);
if (return_value < 0) {
printf("Error creating the pipe");
}
int rc = fork();
if (rc < 0) {
printf("Error forking a child");
}
if (rc > 0) {
close(fd[0]);
write(fd[1], message_buffer, 15);
close(fd[1]);
wait(NULL);
} else {
close(fd[1]);
read(fd[0], read_buffer, 15);
close(fd[0]);
printf("The Message: %s", read_buffer);
}
return 0;
}
我是管道新手,我有以下问题:
- 我不明白为什么父母需要在写入之前关闭读取端,而需要在写入后关闭写入端?
- 孩子也一样,为什么在读之前要关闭写端,为什么读后要关闭读端呢?
- 由于父母和孩子同时运行,如果孩子在父母写消息的同时阅读会发生什么?
- 由于父母和孩子同时运行,如果孩子读取并且父母还没有在管道中写入任何东西会发生什么?
我的问题似乎很愚蠢,但请帮助回答它们,因为我正在为我的课程考试学习普通管道。