笔记1-1: 实现一个简单的ls列出目录中的所有项目的程序
实现一个简单的ls列出目录中的所有项目的程序:
#include <apue.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR * dp;
struct dirent * dirp;
if (argc != 2)
err_quit("usage : ls directory_name\n");
if ((dp = opendir(argv[1])) == NULL)
err_sys("cannot open directory %s\n", argv[1]);
while ((dirp = readdir(dp)) != NULL)
printf("%s\n", dirp->d_name);
closedir(dp);
return 0;
}
opendir()函数打开一个目录,返回一个指向DIR结构的指针,如果打开失败则返回NULL。
函数原型:
DIR*opendir(const char *path);
循环调用readdir()函数可以读出DIR结构指向的目录的每个目录项。readdir()成功的话,返回一个目录项结构struct dirent的指针,失败则返回NULL。
函数原型:
struct dirent * readdir(DIR * dir);
closedir()函数用于关闭参数dir所指的目录流。关闭成功则返回0,失败返回-1。
函数原型:
int closedir(DIR *dir);
注意:目录文件作为一种文件,在打开必须关闭,否则会由于文件的进程打开文件过多而不能打开新的文件。因此opendir函数和closedir函数同样是配对出现的。
注:上面函数功能,在Windows平台下可使用_findfirst(), _findnext(), _findclose() 函数代替。