#include #include #include #include #include #include #include #include #define BUFFER_SIZE 256 #define PIPE_NAME "/bin/fifo" int main() { pid_t pid; int pipe_fd; char buffer[BUFFER_SIZE]; int bytes_read; int status; // 创建命名管道 mkfifo(PIPE_NAME, 0666); // 创建子进程 pid = fork(); if (pid < 0) { fprintf(stderr, "Fork failed\n"); return 1; } else if (pid == 0) { // 子进程 // 打开管道以供读取 pipe_fd = open(PIPE_NAME, O_RDONLY); // 从管道中读取数据 bytes_read = read(pipe_fd, buffer, BUFFER_SIZE); if (bytes_read > 0) { printf("Child process received message: %s\n", buffer); } // 关闭管道文件描述符 close(pipe_fd); // 删除命名管道 unlink(PIPE_NAME); exit(0); } else { // 父进程 // 打开管道以供写入 pipe_fd = open(PIPE_NAME, O_WRONLY); // 向管道写入数据 const char *message = "Hello from parent process"; write(pipe_fd, message, strlen(message) + 1); // 关闭管道文件描述符 close(pipe_fd); // 等待子进程结束 waitpid(pid, &status, 0); if (WIFEXITED(status)) { printf("Child process exited with status: %d\n", WEXITSTATUS(status)); } } return 0; }