readdir

名字 readdir ,readdir_r,----讀一個目錄 頭檔案 #include

簡介

語法: 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\n",*++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\n",dirname);

return ERROR;

}

while((p_dirent=readdir(p_dir)))

{

printf("%s\n",p_dirent->d_name);

}

closedir(p_dir);

return OK;

}

有圖有真相 有圖有真相

相關詞條

相關搜尋

熱門詞條

聯絡我們