// 创建两个子进程,一个子进程向有名管道写入数据,另一个子进程从有名管道读取数据。 #include #include #include #include #include #include #include #include int main() { if (mkfifo("fifo", 0644) == -1) // 创建有名管道 { // 如果有名管道已经存在,不报错 // 如果是其他错误,报错 if (errno != EEXIST) { perror("mkfifo"); _exit(1); } } int fd = open("fifo", O_RDWR); // 打开有名管道 if (fd == -1) { perror("open"); _exit(1); } int i = 0; for (; i < 2; i++) { pid_t pid = fork(); if (pid == 0) break; // 子进程跳出循环 } if (i == 0) { char msg[32] = ""; printf("请在子进程 1 中输入一段内容: "); scanf("%s", msg); write(fd, msg, strlen(msg) + 1); // 包括'\0' , 写入管道 } else if (i == 1) { char buf[32] = ""; int len = read(fd, buf, sizeof(buf)); printf("子进程 2 收到子进程 1 数据: %s\n", buf); } close(fd); // 关闭管道 waitpid(0, NULL, 0); return 0; }