请设计出使用一个管道实现父进程与子进程通信的程序。
时间: 2023-12-10 08:41:48 浏览: 137
基于管道的进程间通信的小实例
下面是一个简单的示例程序,使用管道实现了父进程与子进程之间的通信:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int fd[2];
pid_t pid;
char buf[256];
if (pipe(fd) < 0) {
perror("pipe error");
exit(1);
}
if ((pid = fork()) < 0) {
perror("fork error");
exit(1);
} else if (pid > 0) { /* parent */
close(fd[0]); /* close read end */
/* write to pipe */
printf("Parent process is writing to pipe...\n");
write(fd[1], "Hello, child process!", 22);
close(fd[1]); /* close write end */
/* wait for child to exit */
wait(NULL);
} else { /* child */
close(fd[1]); /* close write end */
/* read from pipe */
printf("Child process is reading from pipe...\n");
read(fd[0], buf, 256);
printf("Message received: %s\n", buf);
close(fd[0]); /* close read end */
}
return 0;
}
```
这个程序首先创建了一个管道,然后通过 `fork()` 函数创建了一个子进程。在父进程中,它关闭了管道的读端,然后写入了一条消息到管道中,并关闭了管道的写端。在子进程中,它关闭了管道的写端,然后从管道中读取了一条消息,并将其输出到控制台上。注意,当父进程写入完消息后,它会等待子进程退出,以保证子进程能够正常读取管道中的消息。
阅读全文