c语言fork子进程execl程序并发数据给子进程的代码
时间: 2024-01-21 16:16:07 浏览: 139
Linux 创建子进程执行任务的实现方法
以下是一个简单的 C 语言程序,可以使用 fork() 函数创建子进程,然后使用 execl() 函数在子进程中运行另一个程序,并通过管道向子进程发送数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
int fd[2];
pid_t pid;
if (pipe(fd) < 0) {
fprintf(stderr, "Pipe failed\n");
exit(1);
}
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork failed\n");
exit(1);
} else if (pid == 0) { // 子进程
close(fd[1]); // 关闭写入端口
char buffer[1024];
int n = read(fd[0], buffer, sizeof(buffer));
buffer[n] = '\0';
printf("Received message: %s\n", buffer);
execl("/path/to/child/program", "child_program", buffer, (char *) 0);
exit(0);
} else { // 父进程
close(fd[0]); // 关闭读取端口
char message[] = "Hello, child process!";
write(fd[1], message, strlen(message));
}
return 0;
}
```
在这个程序中,我们首先使用 pipe() 函数创建一个管道,然后使用 fork() 函数创建一个子进程。子进程关闭写入端口并等待从管道读取传入的数据。父进程关闭读取端口并发送数据到管道。最后,子进程使用 execl() 函数来运行另一个程序,并将管道数据作为参数传递给它。
请注意,这只是一个简单的示例程序,实际情况可能更加复杂。在实际应用中,您可能需要使用更复杂的 IPC 机制,如共享内存或消息队列,来传递数据并确保进程间同步和通信的正确性。
阅读全文