opendir

名称:打开一个目录

总揽:

    #include<dirent.h>
    #include<sys/types.h>

    DIR *opendir(const char *name)

描述:

    opendir()函数用来打开一个指定的目录name,返回一个目录流DIR指针。

目录流的位置为第一个目录项上。

返回值:

    opendir()返回执行成功返回一个目录流指针,失败返回NULL并设置errno.

错误:

    EACCESS: 权限不允许

    EMFILE:  进程使用太多文件描述符了

    ENFILE:  当前系统中打开太多文件了

    ENOENT:  要打开的目录不存在或name是一个空字符串

    ENOMEM:  没有足够的内存完成操作

    ENOTDIR: 指定的name不是一个目录

实例:

    #include<stdio.h>
    #include<stdlib.h>
    #include<dirent.h>


    int main(void){
        DIR *dir;
        struct dirent *dirp;

        if((dir=opendir("tmpdir"))==NULL){
            printf("Open dir tmpdir fail\n");
            exit(1);}

        while((dirp=readdir(dir))!=NULL)
            printf("Name:%s\n",dirp->d_name);

        closedir(dir);

        return(0);}

扩展:
(1).结构体dirent的定义
   
    位于:/usr/include/bits/dirent.h

    定义:

        struct dirent{
            #ifndef __USE_FILE_OFFSET64
        __ino_t d_ino;  /*inode号*/
        __off_t d_off;  /*下个dirent项的偏移量*/
        #else
        __ino64_t d_ino;
        __off64_t d_off;
        #endif
        unsigned short int d_reclen; /*记录的长度*/
            unsigned char d_type; /*文件类型*/
            char d_name[255]; /*文件名*/
            };

(2).文件类型d_type的定义
   
     位于:/usr/include/dirent.h
    
     定义:

         enum{   
               DT_UNKNOWN = 0,
        # define DT_UNKNOWN     DT_UNKNOWN
            DT_FIFO = 1,
        # define DT_FIFO        DT_FIFO
            DT_CHR = 2,
        # define DT_CHR         DT_CHR 
            DT_DIR = 4,
        # define DT_DIR         DT_DIR 
            DT_BLK = 6,
        # define DT_BLK         DT_BLK 
            DT_REG = 8,
        # define DT_REG         DT_REG 
            DT_LNK = 10,
        # define DT_LNK         DT_LNK 
            DT_SOCK = 12,
        # define DT_SOCK        DT_SOCK
            DT_WHT = 14
        # define DT_WHT         DT_WHT 
          };

(3).DIR定义

    位于:/usr/include/dirent.h

    定义:

       typedef struct __dirstream DIR;