【任务2】Pingpong 写一个程序,创建一个管道,然后在父子进程间“ping-pong”一个字节,即父进程从键盘读取一个字符,通过管道写给子进程,子进程收到后再发回给父进程,父进程将这个字符显示在屏幕上。
时间: 2024-05-08 09:19:57 浏览: 101
进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现
4星 · 用户满意度95%
好的,针对您的问题【任务2】,以下是程序代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int fd[2]; // 管道文件描述符
pid_t pid; // 子进程 ID
char buf; // 存放传输数据的缓冲区
if (pipe(fd) < 0) { // 创建管道
perror("pipe error");
exit(EXIT_FAILURE);
}
pid = fork(); // 创建子进程
if (pid < 0) { // 创建子进程失败
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid == 0) { // 子进程
close(fd[1]); // 关闭写端
while (read(fd[0], &buf, 1) > 0) { // 读管道
write(STDOUT_FILENO, &buf, 1); // 输出到屏幕
if (buf == '\n') { // 读到换行结束
break;
}
}
close(fd[0]); // 关闭读端
exit(EXIT_SUCCESS);
}
else { // 父进程
close(fd[0]); // 关闭读端
while (read(STDIN_FILENO, &buf, 1) > 0) { // 读键盘
write(fd[1], &buf, 1); // 写管道
if (buf == '\n') { // 读到换行结束
break;
}
}
close(fd[1]); // 关闭写端
waitpid(pid, NULL, 0); // 等待子进程退出
exit(EXIT_SUCCESS);
}
}
```
这个程序创建了一个管道,通过父子进程间的“ping-pong”方式进行字节传输,父进程从键盘读取一个字符,通过管道写给子进程,子进程收到后再发回给父进程,父进程将这个字符显示在屏幕上。
阅读全文