12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #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;
- }
|