一、目录的打开和关闭
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 成功删除 |
练习一:编写一个程序,删除一个现有的目录。
本文转自http://blog.chinaunix.net/u1/59291/showart.php?id=538541