您的位置:首页 > 运维架构 > Linux

linux编程学习1-列举一个目录下的文件

2015-05-31 02:26 621 查看
一、结构体

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 cha d_type;//the type of d_name 文件类型

char d_name[NAME_MAX + 1];//filename 文件名,最长256个字符

};

说明:

d_type可能是以下值中的其中一个:

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,这是一个命名管道

DT_LNK:this is a symbolic link,这是一个符号文件

DT_REG:this is a regular file,这是一个规则文件

DT_SOCK:this is a Unix sock,这是一个Unix域套接字

DT_UNKNOWN:this file type is unknown,这个文件类型未知

二、函数

DIR *opendir(const char *name);

1.头文件

#include <dirent.h>

2.描述

opendir函数根据目录路径name打开一个目录流,并返回这个目录流指针,这个目录流指向目录name的第一个条目(entry)

3.返回值

如果成功,返回目录流指针DIR*,否则,返回NULL

4.注意

如果成功打开,不用这个目录流指针的时候,需要调用int closedir(DIR *dirp)函数释放这个目录流指针

struct dirent *readdir(DIR *dirp);

1.头文件

#include <dirent.h>

2.描述

readdir函数

3.返回值

如果成功,返回dirent*,否则返回NULL

int closedir(DIR *dirp);

1.头文件

#include <dirent.h>

2.描述

closedir函数释放一个打开的目录流

3.返回值

如果成功,返回0,否则返回-1

三、源码实现

#include <dirent.h>
#include <stdio.h>

int list_dir(char *filename) {
DIR *dirp;
if ((dirp = opendir(filename)) == NULL) {
printf("cann't open %s\n", filename);
return -1;
}

dirent *direntp;
while ((direntp = readdir(dirp)) != NULL)
printf("type:%d, name:%s\n", direntp->d_type, direntp->d_name);

closedir(dirp);
return 0;
}

int main(int argc, char *argv[]) {
if (argc != 2) {
printf("input param error!!");
return -1;
}

return list_dir(argv[1]);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: