// 创建一个父进程和一个子进程,父进程从文件读取数据,并通过管道发送给子进程,子进程将数据输出到标准输出。 // 例如:父进程从文件读取到的数据为:hello world,子进程将输出:hello world #include #include #include #include #include #include int main() { pid_t pid; int fd[2]; int f = pipe(fd); if (f == -1) { perror("pipe"); // 创建管道失败 _exit(1); // 创建管道失败,退出 } pid = fork(); if (pid == 0) { close(fd[1]); // 子进程关闭管道写端 char buf[32] = ""; int len = read(fd[0], buf, sizeof(buf)); // buf[len] = '\0'; // 不加'\0',父进程读取到的数据会有乱码 printf("子进程收到父进程数据: %s", buf); close(fd[0]); // 关闭管道读端 _exit(0); // 子进程退出 } close(fd[0]); // 父进程关闭管道读端 int fd_file = open("a.txt", O_RDONLY); // 打开文件 if (fd_file == -1) { perror("open"); _exit(1); } char buf[32] = ""; int len = read(fd_file, buf, sizeof(buf)); if (len == -1) { perror("read"); _exit(1); } // 不加'\0',子进程读取到的数据会有乱码 write(fd[1], buf, strlen(buf) /* + 1 */); // 包括'\0' , 写入管道 close(fd[1]); // 关闭管道写端 close(fd_file); waitpid(0, NULL, 0); // 等待子进程退出 return 0; }