作为一个学生在Linux实验中编写C或C++语言程序,实现:“/root”路径和“/home”路径下目录树的遍历。
时间: 2024-05-12 16:15:33 浏览: 113
好的,这个问题可以分成两部分,遍历/root路径下的目录树和遍历/home路径下的目录树。下面是C语言实现的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
void traverse(char* path);
int main()
{
printf("Traversing /root:\n");
traverse("/root");
printf("\nTraversing /home:\n");
traverse("/home");
return 0;
}
void traverse(char* path)
{
DIR* dir = opendir(path);
if (dir == NULL) {
printf("Cannot open directory %s\n", path);
return;
}
struct dirent* dp;
while ((dp = readdir(dir)) != NULL) {
if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) {
continue;
}
char filepath[256];
snprintf(filepath, sizeof(filepath), "%s/%s", path, dp->d_name);
struct stat sb;
if (stat(filepath, &sb) != 0) {
printf("Cannot get file status %s\n", filepath);
continue;
}
if (S_ISDIR(sb.st_mode)) {
printf("%s/\n", filepath);
traverse(filepath);
} else if (S_ISREG(sb.st_mode)) {
printf("%s\n", filepath);
}
}
closedir(dir);
}
```
首先在main函数中分别调用traverse函数遍历/root和/home路径下的目录树。
在traverse函数中,首先使用opendir函数打开指定的目录。如果打开失败,提示错误信息并返回。
之后使用readdir函数遍历目录中的所有文件和子目录。对于每个文件或子目录,使用stat函数获取其文件状态。如果出错,提示错误信息并继续遍历下一个文件或子目录。
如果是子目录,递归调用traverse函数遍历子目录。如果是普通文件,直接输出文件路径。
需要注意的是,在拼接文件路径时,为了避免路径过长导致缓冲区溢出,可以使用snprintf函数代替sprintf函数。在这个示例代码中,使用大小为256的字符数组作为缓冲区进行拼接。
阅读全文