c语言fork子进程execl程序并与子进程通信的代码
时间: 2024-01-21 15:16:01 浏览: 97
Linux中使用C语言的fork()函数创建子进程的实例教程
下面是一个示例代码,使用 C 语言 fork 子进程并且使用 execl 函数运行另一个程序,并与子进程进行通信:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#define BUFFER_SIZE 256
int main(int argc, char *argv[]) {
int fd[2];
pid_t pid;
char buffer[BUFFER_SIZE];
int n;
// 创建管道
if (pipe(fd) < 0) {
perror("pipe");
exit(1);
}
pid = fork(); // 创建子进程
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) { // 子进程
close(fd[0]); // 关闭读取端
dup2(fd[1], STDOUT_FILENO); // 将标准输出重定向到管道写端
// 执行另一个程序
execl("/path/to/program", "program", NULL);
// 如果 execl 执行失败则输出错误信息
perror("execl");
exit(1);
} else { // 父进程
close(fd[1]); // 关闭写入端
while ((n = read(fd[0], buffer, BUFFER_SIZE)) > 0) { // 从管道读取数据
buffer[n] = '\0';
printf("Received message from child process: %s", buffer);
}
if (n < 0) {
perror("read");
exit(1);
}
wait(NULL); // 等待子进程结束
exit(0);
}
}
```
这段代码创建了一个管道用于父子进程之间的通信。父进程使用 `fork` 函数创建一个子进程,然后使用 `execl` 函数在子进程中执行另一个程序。子进程将标准输出重定向到管道写端,父进程从管道读取数据并打印出来。最后,父进程等待子进程结束并退出。
阅读全文