#include #include #include #include int main() { int fd[2]; int f = pipe(fd); if (f == -1) { perror("pipe"); return 1; } int pid = fork(); if (pid == 0) { // 子进程: 读 // 关闭写通道 close(fd[1]); for (int i = 0; i < 3; i++) { char buf[1024] = {}; int len = read(fd[0], buf, 1024); // 可能会阻塞,数据为空时会阻塞 buf[len - 1] = '\0'; printf("%d 子进程读取到: %s ,数据大小为 %d\n", getpid(), buf, len); } // 关闭使用完之后,记得关闭 close(fd[0]); // 关闭读管道 _exit(0); } else if (pid > 0) { // 父进程,写 // 关闭读通道 close(fd[0]); // 从键盘读取数据写入到管道中 while (1) { char buf[32] = {""}; int len = read(0, buf, 32); write(fd[1], buf, len); } // 关闭写通道 close(fd[1]); } return 0; }