⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dir.c

📁 本程序通过系统调用stat读出文件大小属性
💻 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 + -