实现功能

 在Linux系统中创建一个子进程,要求子进程对一个目录中的子目录或者文件进行数量统计(不计隐藏文件),并汇报给父进程,父进程等待子进程运行结束后,将子进程所得结果进行输出.

源代码如下

/* 功能:创建一个子进程,要求子进程对一个目录中的子 目录或者文件进行数量统计,并汇报给父进程, 父进程将结果进行输出. 制作:幻竹涂 时间:2019年11月20日 */

#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char* argv[])
{
   
	int sum = 0;
	if(argc < 2)
	{
   
		printf("Usage : %s <directory>\n",argv[0]);
		return -1;
	}
	DIR* dir = opendir(argv[1]);  //获取目录流标示
	if(!dir)
	{
   
		perror("opendir") ;
		return -1;
	}
	struct dirent* p = {
   0};

	pid_t pid = fork();	//创建子进程
	if(pid < 0)
	{
   
		perror("fork");
		closedir(dir);
		return -1;
	}
	if(pid == 0)
	{
   
		while(p = readdir(dir))	//对目录下的文件及子目录计数
		{
   	
			if(!strncmp(p->d_name,".",1))	 continue;
			sum++;
		}
		closedir(dir);
		exit(sum);	//退出进程,返回状态值
	}
	else
	{
   
		int res;
		wait(&res);	   //阻塞父进程,获取子进程结束状态值
		printf("%s 下有文件及子目录的数量是:%d \n",
					argv[1],WEXITSTATUS(res)); //转换并输出返回的实际状态值
	}
	closedir(dir);	  //关闭目录流标示
	return 0;
}

实验结果