123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #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;
- }
|