在 while 循环的底部,读取另一个目录条目并对其进行处理。如果您完成了对目录条目的处理,那么关闭当前打开的目录,并返回经过处理的条目的数目。
清单 6. 读取另一个条目
retval = readdir_r( dir, &entry, &entryPtr );
}
/* Close the Directory and return the number of entrIEs. */
(void)closedir( dir );
return count;
}
最后,清单 7 显示了该程序的 main() 函数,它只是对命令行中传递的每个参数调用了 process_directory() 函数。一个真正的程序应该具有使用方法消息,并且在用户没有指定任何参数时,提供某种形式的反馈信息,但我把这项内容作为练习留给读者。
清单 7. 主线
/* readdir_demo main()
*
* Run through the specified directories, and pass them
* to process_directory().
*/
int main( int argc, char **argv )
{
int idx = 0;
unsigned count = 0;
for( idx = 1; idx < argc; idx++ ) {
count += process_directory( argv[idx] );
}
return EXIT_SUCCESS;
}
这就是整个程序。尽管包含了较多的文件,但处理目录条目并不是十分困难。
结束语
使用 readdir() 和 stat() 函数浏览目录中的条目并确定对其进行的额外处理,是非常简单的,在您需要列举目录中的内容时,也可能会使用到这种处理方法。它是一种很实用的方法,但是对于一些没有经验的 Unix 开发人员来说,却难以掌握。本文的目的是降低其难度,使得 UNIX 开发人员能够充分利用这些有价值的函数。
标签: