📄 dir.c
字号:
#include <stdio.h>#include <string.h>#include <fcntl.h> /* flags for read & write */#include <sys/types.h> /* typedefs */#include <sys/stat.h> /* structure returned by stat */#include <dirent.h>//#inlcude "syscalls.h"#define MAX_PATH 1024void fsize(char *);void dirwalk(char *dir, void (*fcn)(char*));/* print file sizes */intmain(int argc, char **argv){ if (argc == 1) /*default: current directory */ fsize("."); else while (--argc > 0) fsize(* ++argv); return 0;}/* fsize: print size of file "name" */voidfsize(char *name){ struct stat stbuf; if (stat(name, &stbuf) == -1) { fprintf(stderr, "fsize: cant access %s\n", name); return; } //printf("fsize: %s \n", name); if ( (stbuf.st_mode & S_IFMT) == S_IFDIR) { dirwalk(name, fsize); } printf("%8ld %s\n", stbuf.st_size, name);}/* dirwalk: apply fcn to all files in dir */voiddirwalk(char *dir, void (*fcn)(char *)){ char name[MAX_PATH]; DIR *dfd; struct dirent *dp; ///printf("dirwalk: %s \n", dir); if ( (dfd=opendir(dir)) == NULL) { fprintf(stderr, "dirwalk: cant open %s\n", dir); return; } while ( (dp=readdir(dfd)) != NULL) { if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue; /* skip self and parent */ if (strlen(dir)+strlen(dp->d_name)+2 > sizeof(name)) fprintf(stderr, "dirwalk: name %s/%s too long\n", dir, dp->d_name); else { sprintf(name, "%s/%s", dir, dp->d_name); (*fcn)(name); } } closedir(dfd);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -