二、/*通过fork创建子进程A, B。A进程统计用户主目录下文件(包括文件夹)的个数并打印结果,B 进程列出用户主目录下的所有文件(包括文件夹),等待两个子进程都执行完毕时,父进程才退出。*/
#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<dirent.h>
int main(){
pid_t pidA,pidB;
int pidwait;
int sta;
DIR *dpA,*dpB;
struct dirent *dir_entry;
int num=0;
dpA=opendir("Examples");//第一次打开文件,将文件的属性值赋给dpA
if(dpA==NULL){
printf("the directory is not exist!/n");
exit(1);
}
pidA=fork();//create process A
if(pidA<0){
printf("create process A error/n");
exit(1);}
else {
if(pidA==0){
printf("now we are in the prodess A:/n");
while((dir_entry=readdir(dpA))!=NULL)
num++;//用于计算文件个数(包括文件夹)
printf("The number of the file is:%d/n",num);}
else {
// wait(&sta);//等待直到子进程A结束
dpB=opendir("Examples");//第二次打开文件,将文件属性赋给B
if(dpB==NULL){
printf("the directory is not exist!/n");
exit(1);}
pidB=fork();//create process B
if(pidB<0){
printf("create process B error/n");
exit(1);}
else if(pidB==0){
printf("now we are in the process B:/n");
while((dir_entry=readdir(dpB))!=NULL) {
printf("the filename and directory are:%s/n",dir_entry->d_name);}//输出所含有的文件的名字
}
else{
// wait(&sta);//等待子进程B结束
printf("now in parent process/n");
exit(1);}
}
}
closedir(dpA);//关闭文件
closedir(dpB);
return 0;
}
截图:
说明:在用户目录下建立一个名字为1的文件夹,程序结果显示了文件夹中的文件。