父子进程间通信, 实现ps aux | grep bash 使用execlp函数和dup2函数
时间: 2024-03-06 17:46:13 浏览: 100
父子进程间通信可以使用管道(pipe)来实现。具体步骤如下:
1. 创建一个管道,使用pipe函数。
2. 创建子进程,使用fork函数。
3. 在子进程中,使用dup2函数将标准输出重定向到管道的写端,关闭管道的读端。
4. 在子进程中,使用execlp函数执行grep bash命令。
5. 在父进程中,关闭管道的写端,使用dup2函数将标准输入重定向到管道的读端。
6. 在父进程中,使用execlp函数执行ps aux命令。
7. 等待子进程结束,使用wait函数。
具体实现代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
int fd[2];
pid_t pid;
if (pipe(fd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0) { // 子进程
close(fd[0]); // 关闭管道的读端
dup2(fd[1], STDOUT_FILENO); // 将标准输出重定向到管道的写端
execlp("ps", "ps", "aux", NULL);
exit(EXIT_FAILURE);
} else { // 父进程
close(fd[1]); // 关闭管道的写端
dup2(fd[0], STDIN_FILENO); // 将标准输入重定向到管道的读端
execlp("grep", "grep", "bash", NULL);
wait(NULL); // 等待子进程结束
exit(EXIT_SUCCESS);
}
return 0;
}
```
阅读全文