zoukankan      html  css  js  c++  java
  • linux C 列出目录中的文件列表 包含文件的相关信息

    当前目录下

    任意指定目录


    1
    #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <unistd.h> 6 #include <dirent.h> 7 #include <string.h> 8 9 #define MAX_PATH 1024 10 11 //dirwalk: apply fcn to all files in dir 12 /*递归遍历目录*/ 13 void dirwalk(char *dir, void (*fcn)(char *)) 14 { 15 char name[MAX_PATH]; 16 struct dirent *dp; 17 DIR *dfd; 18 19 if ((dfd = opendir(dir)) == NULL) { 20 fprintf(stderr, "dirwalk:can not open %s ", dir); 21 return; 22 } 23 while ((dp = readdir(dfd)) != NULL) { 24 if ((strcmp(dp->d_name, ".") == 0) || (strcmp(dp->d_name, "..") == 0)) 25 continue; //skip self and parent 26 if (strlen(dir)+strlen(dp->d_name)+2 > sizeof(name)) { 27 fprintf(stderr, "dirwalk: name %s %s too long ", dir, dp->d_name); 28 } else { 29 sprintf(name, "%s/%s", dir, dp->d_name); 30 (*fcn)(name); 31 } 32 } 33 closedir(dfd); 34 } 35 36 //fsize: print the size and name of the file "name" 37 void fsize(char *name) 38 { 39 struct stat st_buf; 40 if (stat(name, &st_buf) != 0) { //通过文件名name获取文件信息,并保存在st_buf所指的结构体stat中 41 fprintf(stderr, "fsize:can not access to %s ", name); //返回值:执行成功则返回0,失败返回-1,错误代码存于errno 42 return; 43 } 44 if ((st_buf.st_mode & S_IFMT) == S_IFDIR) { 45 dirwalk(name, fsize); 46 } 47 printf("%8ld %s ", st_buf.st_size, name); 48 } 49 50 int main(int argc, char *argv[]) 51 { 52 if (argc == 1) //default: current dir 53 fsize("."); 54 else 55 while (--argc > 0) 56 fsize(*++argv); 57 return 0; 58 }
  • 相关阅读:
    Ubuntu安装k8s
    SecureCRT连ubuntu
    硬盘安装ubuntu系统
    发布服务
    使用rancher2建k8s集群--个人学习记录
    spring boot 注解
    用STS构建spring boot
    使用js调用麦克风并录音
    全国省市区信息,mysql数据库记录
    ef core 3 migration
  • 原文地址:https://www.cnblogs.com/torres-9/p/5948635.html
Copyright © 2011-2022 走看看