#include <stdio.h> #include <stdlib.h> #include <dirent.h> int main(int argc, char *argv[]) { DIR *dp; struct dirent *dirp; if(argc != 2){ printf("usage: ls directory_name\n"); exit(1); } if((dp = opendir(argv[1])) == NULL){ printf("can't open %s\n",argv[1]); exit(1); } while((dirp = readdir(dp)) != NULL) printf("d_name: %s\n",dirp->d_name); closedir(dp); return 0; }
DIR结构体的定义如下:
<pre class="plain" name="code">struct __dirstream { void *__fd; char *__data; int __entry_data; char *ptr; int __entry_ptr; size_t __allocation; size_t __size; __lib_lock_define (, __lock) }; typedef struct __dirstream DIR; DIR结构体类似于FILE,是一个内部结构体。
dirent结构体的定义如下:
struct dirent { long d_ino; //索引节点号 off_t d_off; //在目录文件中的偏移 unsigned short d_reclen; //文件名的长度 unsigned char d_type; //文件类型 char d_name[NAME_MAX + 1]; // 文件名,最长255字符 };
opendir函数:
函数 DIR *opendir(const char *pathname) //打开一个目录,成功返回的指向DIR的结构体的指针。失败返回NULL。该指针有以下几个函数使用: struct dirent *readdir(DIR *dp); //读取目录,成功返回参数目录流的下个目录进入点,失败返回NULL void rewinddir(DIR *dp); //用来设置参数dp目录流目前读取位置为原来开头的读取位置 int closedir(DIR *dp); // 关闭参数dp所指的目录流 long telldir(DIR *dp); // 返回参数dp目录流当前的读取位置,此返回值代表距离目录文件开头的偏移量返回值返回下个读取位置,有错误发生时返回-1 void seekdir(DIR *dp, long loc); //设置参数dp目录流的读取位置。参数loc代表距离目录文件开头的偏移量
时间: 2024-10-07 07:53:02