使用readdir函数读取一个文件夹的子文件,打印并统计个数

readdir一般与opendir结合使用。
readdir包含的头文件:  #include
readdir函数的原型: struct dirent *readdir(DIR *dirp);

函数的作用是:返回一个指向dirp所指向的目录流下一个目录条目的dirent结构的指针。它返回

当到达目录流的末尾或发生错误时为NULL。

在Linux上,dirent结构定义如下:

struct dirent
 {
    ino_t          d_ino;       /* inode number */
    off_t          d_off;       /* not an offset; see NOTES */
    unsigned short d_reclen;    /* length of this record */
    unsigned char  d_type;      /* type of file; not supportedby all filesystem types */                                       
    char           d_name[256]; /* filename */
  };

返回值

成功后,readdir()返回指向dirent结构的指针。(此结构可以静态分配;不要试图释放它。如果

到达目录流,返回NULL,不更改errno。如果发生错误,则返回NULL,并适当地设置errno。

 

 


#include
#include 
#include 
#include 
#include 


int main(int argc,char**argv)
{
	
	DIR *pth = NULL;
	struct dirent *dr = NULL;
	unsigned int cnt =0;
	
	if(argc!=2)
	{
		printf("使用 %s pathname\n",argv[0]);
	}
	
	pth = opendir(argv[1]);
	if(NULL==pth)
	{
		perror("opendir:");
	}
	
	while(1)
	{	
		dr = readdir(pth);		//一直循环读取子文件,调用时文件标识符绑定不会重复,所以不会重复读取相同的子文件
		if(dr!=NULL)
		{
		printf("dr->d_name=%s\n",dr->d_name);
		cnt++;
		}
		if(dr ==NULL)
		{
			break;
		
		}
	}
	
	printf("总文件数为:%d\n", cnt);
	return 0;
}

通过argv[1]将文件目录传进去,./a.out  ./  的执行结果:

dr->d_name=.
dr->d_name=..
dr->d_name=a.out
dr->d_name=add.c
dr->d_name=case
dr->d_name=define_test.c
dr->d_name=file
dr->d_name=gettimeofday.c
dr->d_name=lib
dr->d_name=memcpy.c
dr->d_name=net
dr->d_name=pipe
dr->d_name=puts.c
dr->d_name=readir
dr->d_name=resgister.c
dr->d_name=return-1.c
dr->d_name=return_case.c
dr->d_name=string.c
dr->d_name=struct.c
dr->d_name=test
dr->d_name=test.c
dr->d_name=time.c
dr->d_name=weiyu.c
dr->d_name=yuan.c
总文件数为:24
 

 

你可能感兴趣的:(Linux学习笔记)