linux下du命令的c语言代码实现
时间: 2023-09-25 15:09:20 浏览: 124
下面是一个简单的Linux下du命令的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
void du(char *path)
{
DIR *dir = opendir(path);
if (!dir) {
printf("无法打开目录 %s\n", path);
return;
}
struct dirent *entry;
while ((entry = readdir(dir))) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
char new_path[strlen(path) + strlen(entry->d_name) + 2];
sprintf(new_path, "%s/%s", path, entry->d_name);
struct stat st;
if (lstat(new_path, &st) == -1) {
printf("无法获取文件信息 %s\n", new_path);
continue;
}
if (S_ISDIR(st.st_mode)) {
du(new_path);
} else if (S_ISREG(st.st_mode)) {
printf("%ld %s\n", st.st_size, new_path);
}
}
closedir(dir);
}
int main(int argc, char **argv)
{
if (argc != 2) {
printf("用法: %s <目录>\n", argv[0]);
exit(1);
}
du(argv[1]);
return 0;
}
```
这个程序使用递归地遍历目录中的所有文件和子目录,并打印出每个普通文件的大小和路径。程序使用了Linux系统的dirent.h和sys/stat.h头文件来操作目录和文件。
阅读全文