词条 | readdir |
释义 | 语法: struct dirent* readdir(DIR* dir_handle); 返回值: dirent的结构类型 函数种类: 文件存取 内容说明 本函数用来读取目录。返回是dirent结构体指针,dirent结构体成员如下, struct dirent { long d_ino; /* inode number 索引节点号 */ off_t d_off; /* offset to this dirent 在目录文件中的偏移 */ unsigned short d_reclen; /* length of this d_name 文件名长 */ unsigned char d_type; /* the type of d_name 文件类型 */ char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */ } readdir相当于文件操作函数read,DIR结构体相当于文件操作里面的FILE结构体。 DIR结构体成员如下: struct __dirstream { void *__fd; /* `struct hurd_fd' pointer for descriptor. */ char *__data; /* Directory block. */ int __entry_data; /* Entry number `__data' corresponds to. */ char *__ptr; /* Current pointer into the block. */ int __entry_ptr; /* Entry number `__ptr' corresponds to. */ size_t __allocation; /* Space allocated for the block. */ size_t __size; /* Total valid data in the block. */ __libc_lock_define (, __lock) /* Mutex lock for this structure. */ }; typedef struct __dirstream DIR; 现在似乎被封装了,无法再头文件中找到了。 例子: 用c语言来简单实现linux下ls的功能代码如下: #include"unistd.h" #include"sys/types.h" #include"fcntl.h" #include"dirent.h" #include"stdio.h" #ifndef NULL #define NULL 0 #endif #ifndef ERROR #define ERROR 0 #define OK 1 #endif typedef int Status; Status ls(char *); int main(int argc,char **argv) { if(argc==1) ls("."); else while(--argc) { printf("%s\",*++argv); ls(*argv); } } Status ls(char *dirname) { DIR *p_dir; struct dirent *p_dirent; if((p_dir=opendir(dirname))==NULL) { fprintf(stderr,"---->can\\'t open %s\",dirname); return ERROR; } while((p_dirent=readdir(p_dir))) { printf("%s\",p_dirent->d_name); } return OK; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。