一、目录的打开和关闭
1.
名称: | opendir |
目标: | 打开一个目录。 |
头文件: | #include <sys/types.h> #include < dirent.h> |
函数原形: | DIR *opendir(const char *name) |
参数: | name 目录名 |
返回值: | NULL 遇到错误 |
| DIR * 打开成功 |
opendir用于打开一个目录,其功能和open相似。只不过open用于打开一个文件,而opendir用于打开一个目录。如果opendir可以成功打开一个目录,它就返回一个指向目录的指针,我们可以通过opendir的联机帮助知道这些内容。
首先在命令提示符后面键入[root@LINUX root]#man –k opendir来查找和opendir相关的联机帮助。我们可以得到以下内容:
opendir (3) -open a directory
这正是我们想要的。
然后我们可以键入[root@LINUX root]#man 3 opendir 来查看opendir[3]的联机帮助。
在帮助文档中我们可以看到这样一段话:
The opendir() function opens a directory stream correspondig to the directory name,and returns a pointer to the directory stream. The stream is positioned at the first entry in the directory.
The opendir() function rerurns a poin to the directory stream or NULL if an error occurred.
这些正是我们要找的信息. 除了这些信息我们还可以从帮助中获取诸如函数头文件,函数功能,函数原形,返回值,出错处理,相关函数等信息。大家试着用同样的方法来学习这些相关函数,达到举一返三的目的。
2.
名称: | closedir |
目标: | 关闭一个目录. |
头文件: | #include <sys/types.h> #include < dirent.h> |
函数原形: | int closedir(DIR *dir) |
参数: | dir 指向目录的指针 |
返回值: | -1 遇到错误 |
| 0 打开成功,返回指向目录的指针。 |
二、目录的读取
3
名称: | readdir |
目标: | 读取目录内容。 |
头文件: | #include <unistd.h> #include <lixux/dirent.h> #include < linux/unistd.h> |
函数原形: | int readdir(unsigned int fd ,struct dirent *dirp,unsigned int count) |
参数: | fd 文件描述符 dirp 用于存放读入数据的数组 count |
返回值: | -1 遇到错误 |
| 0 打开成功 |
同样readdir的功能也和read相似,用于读取目录中内容。其实用open,read,close等函数也可以对目录目录操作的,但不是一个好的办法,因为Linux支持多种的目录类型,如Apple,HFS,ISO9600,VFAY,NFS,如果用read来读,需要了解这些不同类型目录各自的结构细节。
利用这些函数我们可以编写不加参数的ls 命令,下面是代码。
/*2_1.c*/
#include < dirent.h> #include <stdio.h> #include <sys/types.h>
void show_dir(char dirname[]);
main(int ac,char *av[]) { if(ac==1) show_dir(“.”); / *读当前目录*/ else while(--ac) { printf(“%s:/n”,*++av); show_dir(*av); /*读指定目录*/ } }
void show_dir(char dirname[]) { DIR *dir_ptr; /*定义目录类型的指针*/ struct dirent *direntp; /*定义用于读目录的缓冲区*/
if((dir_ptr=opendir(dirname))==NULL) printf(“Can’t open!”); else { while((direntp=readdir(dir_ptr))!=NULL) printf(“%s/n”,direntp->d_name); closedir(dir_ptr); } }
|
三、目录的创建和删除
4.
名称: | mkdir |
目标: | 创建目录 |
头文件: | #include < sys/stat.h> #include <sys/types.h> |
函数原形: | int result=mkdir(char *pathname,mode_t mode) |
参数: | pathname 新建目录名 mode 权限位的掩码 |
返回值: | -1 遇到错误 |
| 0 成功创建 |
/*2_2.c*/
#include <unistd.h> #include <sys/types.h>
main(int argc,char *argv[]) { int result; if(argc!=2) printf(“please input a direction.”); if((result=mkdir(argv[1]))==-1) perror(“error”); } |
5.
名称: | rmdir |
目标: | 删除一个目录,此目录必须为空 |
头文件: | #include <unistd.h> |
函数原形: | int result=rmdir(const char *path); |
参数: | path 目录名 |
返回值: | -1 遇到错误 |
| 0 成功删除 |