Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31891
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 72
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-13 13:47
文章分类

全部博文(18)

文章存档

2014年(1)

2013年(17)

我的朋友

分类: LINUX

2013-08-10 14:45:28

opendir()和fdopendir()函数

功    能:打开一个目录
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件:#include
                 #include
定义函数:DIR* opendir(const char* name)
                DIR* fdopendir(int fd)
函数说明:opendir() 打开一个名为name的目录的目录流,并返回一个指向目录流的指针,流指向该目录内的第一个文件。
                fdopendir()与opendir() 的功能相似。但是他根据一个已打开文件的文件描述符返回一个目录流。函数一旦调用成功
               后,fd在实现内部调用,且不能在程序中使用。
返回值  :返回指向目录流的指针。如果失败,返回NULL,且合适的设置errno 的值。
注意:目录流底层的文件描述符可以通过 获得。


readdir
()函数

功    能:读一个目录
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件: #include
定义函数:struct dirrent* readdir(DIR *dirp)
函数说明:readdir() 返回一个指向dirp目录流中下一个目录的dirent结构体指针。当到达目录流尾部,或发生错误时,返回NULL(个 
                人解析)。
               readdir() 函数返回一个代表目录 dirp 里下一个项目的指向 dirent 结构的指针。如果到达目录流结尾或出错它返NULL(函 
                数手册)
              The readdir() function returns a pointer to a dirent  structure  repre‐ senting  the next directory entry in the
              directory stream pointed to by dirp.  It returns NULL on reaching the end of the directory  stream  or if an
              error      occurred

返回值  :成功时,readdir() 返回指向 dirent 结构的指针。(这个结构是静态分配的;不要试图去 它。)如果到达了目录流结
              尾,NULL 被返回并保持 errno 不更改。如果错误发生了,NULL 被返回并小心设置 errno 值。
在linux中dirent 结构体的定义:

        struct dirent {
                          ino_t          d_ino;       /* inode number */
                          off_t          d_off;       /* 下一个项目的偏移 */
                          unsigned short d_reclen;    /* 本记录的长度 */
                          unsigned char  d_type;      /* 文件类型;不是被所有文件系统支持 */
                          char           d_name[256]; /* 文件名 */
                       };

closedir
()函数

功    能:关闭一个目录
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件: #include
                 #include
定义函数:int closedir(DIR *dirp)
函数说明:closedir() 函数关闭由目录流 dirp 引用的目录。一个成功的 closedir() 调用也会引起 dirp 相关的底层的文件描述符被关
                闭。目录流描述符 dirp 在本调用之后不再可用。
返回值  :closedir() 成功时返回 0。错误时,返回 -1,并把 errno 设置为合适的值。

rewinddir()函数

功    能:重置目录流
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件:#include
                #include
定义函数:void rewinddir(DIR *dirp)
函数说明:rewinddir() 函数重置目录流 dirp 的位置到目录的开始。
返回值  :无返回值



seekdir
()函数

功    能:设置目录流上的 readdir() 调用的下一个位置
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件:#include
定义函数:void seekdir(DIR *dirp, long offset)
函数说明:seekdir() 函数设置目录流上位置,这个位置在下次 调用将从这里开始。seekdir() 应该使用一个由 返回的  
               offset
值返回值  :无返回值。


telldir()函数

功    能:返回目录流的当前位置
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件: #include
定义函数:long telldir(DIR *dirp)
函数说明:closedir() 函数关闭由目录流 dirp 引用的目录。一个成功的 closedir() 调用也会引起 dirp 相关的底层的文件描述符被关
                闭。目录流描述符 dirp 在本调用之后不再可用。
返回值  :成功时,telldir() 函数返回目录流的当前位置。错误时,返回 -1,并适当地设置 errno


scandir()函数

功    能:为寻找项目扫描目录
相关函数:open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件: #include
定义函数: int scandir(const char *dirp, struct dirent ***namelist,int (*filter)(const struct dirent *),
                                      int (*compar)(const struct dirent **, const struct dirent **))

函数说明:scandir() 函数扫描目录 dirp,对每一个目录项调用 filter()。把每一个 filter() 返回非零项目保存在一个通过 分 配
               的缓存区里,再通过比较函数是 compar() 的 函数排序,最后收集在 namelist 的数组里,这个数组也是通            分配的。如果 filter 是 NULL,所有项目都被选择。
返回值  :scandir() 函数返回被选择的目录条数,或者如果出错返回 -1。
实例:
#define _SVID_SOURCE
/* 以反序打印当前目录里的文件名 */
#include
int main(void)
{
       struct dirent **namelist;
        int n;
        n = scandir(".", &namelist, 0, alphasort);
        if (n < 0)    error("scandir");
        else
       {
                while (n--)
               {
                       printf("%s\n", namelist[n]->d_name);
                     free(namelist[n]);
               }
                 free(namelist);
         }
}




阅读(1257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~