用Linux实现:创建两个进程,让子进程读取一个文件,父进程等待子进程读完文件后继续执行。
时间: 2024-03-09 20:45:30 浏览: 189
【嵌入式软件工程师面经】Linux系统编程(线程进程).pdf
好的,这是一个经典的进程间通信问题,可以使用 Linux 中的管道(pipe)来实现。
下面是一个基于 C 语言的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int fd[2]; // 管道的文件描述符
pid_t pid; // 进程 ID
char buf[1024]; // 缓冲区
if (pipe(fd) < 0) { // 创建管道
printf("创建管道失败!\n");
exit(1);
}
pid = fork(); // 创建子进程
if (pid < 0) { // 创建失败
printf("创建子进程失败!\n");
exit(1);
} else if (pid == 0) { // 子进程
close(fd[1]); // 关闭写端
while (read(fd[0], buf, sizeof(buf)) > 0) { // 读取管道中的数据
printf("子进程读取到的数据:%s", buf);
}
printf("子进程读取完毕!\n");
close(fd[0]); // 关闭读端
exit(0);
} else { // 父进程
close(fd[0]); // 关闭读端
FILE *fp = fopen("test.txt", "r"); // 打开文件
if (fp == NULL) { // 打开失败
printf("打开文件失败!\n");
exit(1);
}
fgets(buf, sizeof(buf), fp); // 读取文件中的数据
while (!feof(fp)) {
write(fd[1], buf, sizeof(buf)); // 将数据写入管道中
fgets(buf, sizeof(buf), fp);
}
printf("父进程写入完毕!\n");
close(fd[1]); // 关闭写端
waitpid(pid, NULL, 0); // 等待子进程结束
printf("父进程继续执行!\n");
exit(0);
}
}
```
该示例程序创建了一个管道,然后创建了一个子进程和一个父进程。父进程打开一个文件,并将文件中的数据逐行写入管道中。子进程不断从管道中读取数据,直到读取完毕。父进程在子进程读取完毕后继续执行。
需要注意的是,本程序只是一个示例,实际应用中还需要对错误进行处理等。
阅读全文