1.编写程序实现以下功能: 利用匿名管道实现父子进程间通信,要求 父进程发送字符串“hello child”给子进程; 子进程收到父进程发送的数据后,给父进程回复“hello farther”; 父子进程通信完毕,父进程依次打印子进程的退出状态以及子进程的pid。
时间: 2023-03-20 22:06:34 浏览: 172
用匿名管道实现进程之间通信
以下是实现父子进程间通信的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int main() {
int fd[2];
pid_t pid;
char buf[100];
if (pipe(fd) < ) {
perror("pipe error");
exit(1);
}
pid = fork();
if (pid < ) {
perror("fork error");
exit(1);
} else if (pid == ) { // 子进程
close(fd[1]); // 关闭写端
if (read(fd[], buf, sizeof(buf)) < ) {
perror("read error");
exit(1);
}
printf("child received: %s\n", buf);
if (write(fd[1], "hello father", strlen("hello father")) < ) {
perror("write error");
exit(1);
}
close(fd[]); // 关闭读端
exit();
} else { // 父进程
close(fd[]); // 关闭读端
if (write(fd[1], "hello child", strlen("hello child")) < ) {
perror("write error");
exit(1);
}
if (read(fd[], buf, sizeof(buf)) < ) {
perror("read error");
exit(1);
}
printf("father received: %s\n", buf);
close(fd[1]); // 关闭写端
int status;
waitpid(pid, &status, ); // 等待子进程退出
printf("child pid: %d, exit status: %d\n", pid, WEXITSTATUS(status));
}
return ;
}
```
程序中创建了一个匿名管道,父进程向管道中写入字符串“hello child”,子进程从管道中读取该字符串并打印出来,然后向管道中写入字符串“hello father”,父
阅读全文