LeoCache的博客

用工程师的浪漫照亮科技的未来

0%

进程的建立

实验内容

​ 创建两个进程,让子进程读取一个文件,父进程等待子进程读取 完文件后继续执行,实现进程协同工作。进程协同工作就是协调好两个进程,使之安排好先后次序并以此执行,可以用等待函数来实现这一点。当需要等待子进程运行结束 时,可在父进程中调用等待函数。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<sys/unistd.h>
#include<sys/wait.h>
#include <unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(){
pid_t fpid=fork();
int count=0;
if(fpid<0){
printf("error");
}
else if(fpid==0){
printf("子进程:我是子进程,id=%d,开始读取文件:\n",getpid());
FILE *fp=fopen("test1file.txt","r"); //定义文件流
if(fp==NULL){
printf("未找到文件\n");
}
else{
char text[2000];
while (fgets(text,2000,fp)!=NULL)
{
puts(text); //输出文件内容
}

}
printf("子进程:读取文件结束\n");
exit(1);
}
else{
printf("父进程:我是父进程id=%d ,我要等待子进程\n",getpid());

int ret = waitpid(0,NULL,0);
printf("父进程:子进程 已经结束,ret=%d\n", ret);

}
return 0;
}

程序简要分析

​ 该程序主要使用了fork()函数创建了子进程,然后让子进程读取文件并输出文件内容,同时父进程等待子进程的执行,这里用到了waitpid()函数。等待子进程运行完成后,父进程继续运行。

主要函数:pid_t fork(void)

​ pid_t waitpid(pid_t pid,int * status,int options)

​ 搭建了一晚上,终于完成了博客的搭建,第一篇总得起个好名字吧。想了很久还是叫做“Hello,World”吧,我想对于每个程序员来说搭载好每一个新环境的测试都会是“Hello,World”。

​ 从吴军的《浪潮之巅》中得知,“Hello,World”最早诞生于贝尔实验室,你可能对这个实验室的名字感到陌生,新一轮技术革命的核心——集成电路、Linux操作系统的前身Unix、编程始祖且长久未衰的C语言、卫星电话……全部出自贝尔实验室。包括我们熟知的Intel、AMD等芯片巨头都与这家实验室有着千丝万缕的联系。毫不夸张的说,贝尔实验室创造了现代科技的半壁江山。有谁能想到就是一家起初做电话的公司发展到拥有史上最牛实验室的科技帝国,又有谁能想到时至今日那个诞生过13名诺奖得主的实验室已沦落成为一个平平无奇的研究机构,更无人能想到主宰下一个百年的技术在何方……

​ 这就是这个时代,冷酷,但有情。

​ “Hello,World”,世界你好,世界很好,世界变得更好!