opendir/fdopendir/closedir/readdir/rewinddir/telldir/seekdir

#include <dirent.h>

#include <sys/types.h>

 

DIR *opendir(const char *name);

功能:打开一个目录流

返回值:目录流(链表)

 

DIR *fdopendir(int fd);

功能:使用文件描述获取目录流,fd必须是目录流

 

struct dirent *readdir(DIR *dirp);

功能:从目录流中读取一个文件结点信息

返回值:成功则返回下个目录进入点. 有错误发生或读取到目录文件尾则返回NULL.

struct dirent {
    ino_t          d_ino;       /* inode number */ i节点号
    off_t          d_off;       /* offset to the next dirent */ 下一个文件结点信息的偏移量
    unsigned short d_reclen;    /* length of this record */ 当前文件结点信息的长度
    unsigned char  d_type;      /* type of file; not supported by all file system types */文件类型
    char           d_name[256]; /* filename */ 文件的名字
};

 

DT_BLK This is a block device.这是一个块设备。

DT_CHR This is a character device.这是一个字符设备。

DT_DIR This is a directory.这是一个目录。

DT_FIFO This is a named pipe (FIFO).这是一个命名管道(FIFO)。

DT_LNK This is a symbolic link.这是一个符号链接。

DT_REG This is a regular file.这是一个标准文件。

DT_SOCK This is a UNIX domain socket.这是一个Unix域套接字。

DT_UNKNOWN The file type is unknown.文件类型未知。

 

void rewinddir(DIR *dirp);

功能:把目录流的位置指针调整到开头

 

long telldir(DIR *dirp);

功能:获取当前目录流的位置指针在第几个结点

 

void seekdir(DIR *dirp, long offset);

功能:调整当前目录流的位置指针

offset:telldir(dir)的返回值的下一个位置(但和百度百科有冲突,可以自行测试)

 

int closedir(DIR *dirp);

功能:关闭目录流

 

参考源自:Linux丰富的帮助手册。终端执行man opendir和man readdir,即可找到相关资料

相关应用参考:高仿linux下的ls -l命令——C语言实现