创建两个进程,让子进程读取一个文件,父进程等待子进程读取 完文件后继续执行,实现进程协同工作。 进程协同工作就是协调好两个进程,使之安排好先后次序并以此 执行,可以用等待函数来实现这一点。当需要等待子进
时间: 2023-06-11 22:08:44 浏览: 189
程读取完文件后再执行父进程的时候,可以使用wait()函数来实现。
下面是一个示例代码,其中父进程创建子进程并等待子进程读取完文件后继续执行,子进程则负责读取文件并输出文件内容:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
int pid = fork(); // 创建子进程
if (pid == 0) // 子进程
{
FILE *fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("Failed to open file.\n");
exit(1);
}
char buf[1024];
while (fgets(buf, 1024, fp) != NULL) // 逐行读取文件内容并输出
{
printf("%s", buf);
}
fclose(fp);
exit(0); // 子进程执行完毕,退出
}
else if (pid > 0) // 父进程
{
int status;
wait(&status); // 等待子进程执行完毕
printf("Child process finished.\n");
printf("Parent process continues.\n");
}
else // 创建子进程失败
{
printf("Failed to create child process.\n");
exit(1);
}
return 0;
}
```
在这个示例代码中,父进程调用fork()函数创建子进程,然后使用wait()函数等待子进程执行完毕。子进程打开文件,逐行读取文件内容并输出,最后调用exit()函数退出。父进程等待子进程执行完毕后输出一条信息并退出。
需要注意的是,wait()函数会阻塞父进程,直到子进程执行完毕。如果子进程在执行过程中出现了问题导致程序崩溃或无限循环等情况,那么父进程会一直阻塞,无法继续执行。因此,在实际使用中需要对子进程的代码进行严格的测试和调试,以确保程序的稳定性和可靠性。
阅读全文