在Linux中,readdir
函數用于讀取目錄中的條目。它的原型定義在dirent.h
頭文件中,其函數原型如下:
int readdir(DIR *dirp, struct dirent *entry);
readdir
函數的參數有兩個:
DIR *dirp
:這是一個指向DIR
結構體的指針,該結構體表示一個已打開的目錄流。在使用opendir
函數打開一個目錄后,會返回一個指向DIR
結構體的指針,該指針隨后作為readdir
函數的第一個參數傳入。
struct dirent *entry
:這是一個指向dirent
結構體的指針,用于存儲讀取到的目錄項信息。dirent
結構體通常包含以下字段:
ino_t d_ino
:目錄項的inode號。off_t d_off
:目錄項在目錄文件中的偏移量。unsigned short d_reclen
:目錄項名的長度。char d_name[]
:目錄項的名字。readdir
函數的工作方式是,每次調用都會從目錄流dirp
中讀取下一個目錄項,并將其信息填充到entry
指向的dirent
結構體中。如果成功讀取到一個目錄項,readdir
返回一個非零值;如果已經到達目錄流的末尾,返回NULL。
下面是一個簡單的例子,展示如何使用readdir
函數:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int main(int argc, char *argv[]) {
DIR *dir;
struct dirent *dp;
// 打開當前目錄
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
exit(EXIT_FAILURE);
}
// 讀取目錄中的每個條目
while ((dp = readdir(dir)) != NULL) {
printf("%s\n", dp->d_name);
}
// 關閉目錄流
closedir(dir);
return 0;
}
在這個例子中,程序打開了當前目錄(.
),然后循環調用readdir
來讀取每個目錄項,并打印出它們的名字。最后,使用closedir
函數關閉目錄流。