Я пытаюсь удалить все висячие ссылки из dir Рекурсивно, но на каждой ссылке я получаю «lstat: Нет такого файла или каталога».
void deletelinks(char *name, int indent)
{
DIR *dir;
FILE *a;
struct stat sb;
char *buf;
ssize_t nbytes, bufsiz;
struct dirent *entry;
if (!(dir = opendir(name)))
return;
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_DIR) {
char path[1024];
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
snprintf(path, sizeof(path), "%s/%s", name, entry->d_name);
// printf("%*s[%s]\n", indent, "", entry->d_name);
deletelinks(path, indent + 2);
} else {
if(entry->d_type == DT_LNK){
if (lstat(("%s/%s", name, entry->d_name), &sb) == -1) {
printf("%s/%s", name, entry->d_name);
perror("lstat");
exit(EXIT_FAILURE);
}
bufsiz = sb.st_size + 1;
if (sb.st_size == 0)
bufsiz = PATH_MAX;
buf = malloc(bufsiz);
if (buf == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
nbytes = readlink(("%s%s", name, entry->d_name), buf, bufsiz);
if (nbytes == -1) {
perror("readlink");
exit(EXIT_FAILURE);
}
a=fopen(("%s/%*s",name, (int) nbytes, buf), "r");
if(a==NULL){
printf("%s/%*s\n",name, (int) nbytes, buf);
}
}
}
}
closedir(dir);
}
Я хочу, чтобы эта функция удаляла все висячие илинеработающие ссылки в директ.Этот функционал успешно находит все ссылки рекурсивно, но не может распознать, если он зависает или нет, потому что у меня ошибка "lstat: Нет такого файла или каталога"