【发布时间】:2011-07-09 13:07:19
【问题描述】:
我想通过使用线程和进程来遍历文件系统。我的程序必须假设第一个参数是提供多进程应用程序的“-p”或在多进程应用程序中运行的“-t”螺纹方式。第二个参数是 文件或目录的路径名。如果我的程序获取文件的路径,它应该以字节为单位打印出文件的大小。如果我的程序得到一个目录的路径,它应该以同样的方式打印出目录名,然后处理目录中的所有条目 目录本身和父目录除外。如果给我的程序一个目录,它必须显示以指定目录为根的整个层次结构。我写了一些东西,但我卡住了。我无法改进我的代码。请帮助我。
我的代码如下:
包括
包括
包括
包括
包括
包括
包括
int funcThread(DIR *D);
int main(int argc, char * argv[]) { pthread_t 线程[100]; 目录 *dirPointer; 结构统计对象文件; 结构 dirent *object_dir; 整数计数器;
if(opendir(argv[1])==NULL)
{
printf("\n\nERROR !\n\n Please enter -p or -t \n\n");
return 0;
}
if((dirPointer=opendir(argv[1]))=="-t")
{
if ((object_dir = opendir(argv[2])) == NULL)
{
printf("\n\nERROR !\n\nPlease enter the third argument\n\n");
return 0;.
}
else
{
counter=0;
while ((object_dir = readdir(object_dir)) != NULL)
{
pthread_create(&thread[counter],NULL,funcThread,(void *) object_dir);
counter++;
}
}
}
返回 0; }
int funcThread(DIR *dPtr) { 目录 *ptr; 结构统计oFile; 结构 dirent *oDir; 整数;
if(ptr=readdir(dPtr)==NULL)
rewinddir(ptr);
if(S_ISDIR(oFile.st_mode))
{
ptr=readdir(dPtr);
printf("\t%s\n",ptr);
return funcThread(ptr);
}
else
{
while(ptr=readdir(dPtr)!=NULL)
{
printf("\n%s\n",oDir->d_name);
stat(oDir->d_name,&oFile);
printf("\n%f\n",oFile.st_size);
}
rewinddir(ptr);
}
}
【问题讨论】:
标签: c multithreading unix multiprocessing