chr*_*ris 2 c linux filesystems recursion
我尝试编写程序,其中部分列出所有目录(特别是从/开始),但我有一个问题/ proc/self无限递归(我得/ proc/self/task/4300/fd/3/proc/self/task/4300/fd/3/proc/self/task/4300/fd/3/proc/...等等).处理它的好方法是什么?
编辑:程序是用C语言编写的,我使用的是opendir(),readdir()
您可以使用S_ISLNK宏来测试对lstat的调用返回的st_mode字段.如果文件是符号链接,请不要尝试遵循它.
[user@machine:~]:./list | grep link
/proc/mounts is a symbolic link
/proc/self is a symbolic link
Run Code Online (Sandbox Code Playgroud)
示例代码
#include <stdio.h> // For perror
#include <stdlib.h>
#include <sys/types.h> // For stat, opendir, readdir
#include <sys/stat.h> // For stat
#include <unistd.h> // For stat
#include <dirent.h> // For opendir, readdir
const char *prefix = "/proc";
int main(void)
{
DIR *dir;
struct dirent *entry;
int result;
struct stat status;
char path[PATH_MAX];
dir = opendir(prefix);
if (!dir)
{
perror("opendir");
exit(1);
}
entry = readdir(dir);
while (entry)
{
result = snprintf(path, sizeof(path), "%s", prefix);
snprintf(&path[result], sizeof(path) - result, "/%s", entry->d_name);
printf("%s", path);
result = lstat(path, &status);
if (-1 == result)
{
printf("\n");
perror("stat");
exit(2);
}
if (S_ISLNK(status.st_mode))
{
printf("%s", " is a symbolic link");
}
printf("\n");
entry = readdir(dir);
}
return(0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3472 次 |
| 最近记录: |