mkdir和rmdir分别用于创建目录文件和删除目录文件。自然还会有读目录文件的函数。
opendir函数用于打开一个目录文件,获取一个目录描述符,相当于普通文件的open函数;
closedir函数用于关闭一个已经打开的目录文件,相当与普通文件的close函数;
readdir函数用于逐个读出目录表中的目录项(参考《4.20 mkdir和rmdir函数》),相当于普通文件的read函数。
三个函数的原型如下:
#include <dirent.h>
DIR *opendir(const char *pathname);
/*返回值:若成功返回一个DIR指针,若出错则返回NULL*/
struct dirent *readdir(DIR *dp);
/*若成功则返回指针,若已到目录表结尾或出错则返回-1*/
int closedir(DIR *dp);
/*若成功则返回0,若出错则返回-1*/
参数: pathname 目录的路径名
dirent是一个描述目录项的结构,定义如下:
struct dirent {
ino_t d_ino; /*i节点指针*/
char d_name[NAME_MAX + 1]; /*文件名*/
};
实例 x.4.21.1.c
#include <stdio.h>
#include <dirent.h>
#include <unistd.h>
int main(void)
{
char pathname[] = "/tmp/mydir";
DIR *dp;
struct dirent *dir;
if ((dp = opendir(pathname)) == NULL) { /*打开目录,取得目录DIR指针*/
printf("opendir error for %s\n", pathname);
return 1;
}
/*循环读出目录表的目录项*/
while ((dir = readdir(dp)) != NULL){
printf("d_ino:%d; d_name:%s\n", dir->d_ino, dir->d_name);
}
if (dir != NULL){
printf("d_ino:%d; d_name:%s\n", dir->d_ino, dir->d_name);
}
closedir(dp);
return 0;
}
编译与执行:
[root@localhost unixc]# rm -rf /tmp/mydir
[root@localhost unixc]# mkdir /tmp/mydir
[root@localhost unixc]# mkdir /tmp/mydir/dir1 /tmp/mydir/dir2
[root@localhost unixc]# echo "123456789" > /tmp/mydir/file1
[root@localhost unixc]# echo "abcdefjhij" > /tmp/mydir/file2
[root@localhost unixc]# ls -l /tmp/mydir
total 16
drwxr-xr-x. 2 root root 4096 Nov 5 08:13 dir1
drwxr-xr-x. 2 root root 4096 Nov 5 08:13 dir2
-rw-r--r--. 1 root root 10 Nov 5 08:14 file1
-rw-r--r--. 1 root root 11 Nov 5 08:14 file2
[root@localhost unixc]# cc x.4.21.1.c
[root@localhost unixc]# ./a.out
d_ino:917505; d_name:..
d_ino:1062324; d_name:file1
d_ino:1064131; d_name:file2
d_ino:1062290; d_name:.
d_ino:1062323; d_name:dir2
d_ino:1062316; d_name:dir1
[root@localhost unixc]#