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

本文详细介绍了目录操作的基础知识,包括结构体定义、关键函数如opendir、readdir和closedir的使用方法及其返回值含义。并通过一个示例程序展示了如何遍历目录中的所有文件和子目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、结构体

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]);
}
	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值