2016-11-22 4 views
0

Я пытаюсь получить файл с самым низким числом hardlink, но я не знаю, почему, но что-то пошло не так. Я отправляю ниже своего кода. Спасибо всем. (Пс. Простите за мой английский)как получить файл с наименьшим количеством hardlink?

#include<stdio.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<dirent.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<string.h> 

int main(int argc,char* argv[]){ 

struct stat s; 
nlink_t cont=10000; 
char name[1000]; 

     DIR* d; 
     d=opendir("/home/user/Desktop/"); 
     struct dirent* d2; 
     while((d2=readdir(d))!=NULL){ 
      lstat(d2->d_name,&s); 
      if(S_ISREG(s.st_mode)){ 
      if(cont < s.st_nlink){ 
       cont=s.st_nlink; 
       strcpy(name,d2->d_name); 
       } 
       } 
      } 

printf("\nFile:%s\n",name); 

return 0; 

} 
+0

Условие 'cont Arkku

+0

Спасибо, теперь мой код работает. Ошибка была тривиальной. Я не заметил. – Joe

ответ

2

d2->d_name только имя каталога, но lstat требует путь, либо относительный или абсолютный. Поэтому, если ваш текущий рабочий каталог/home/user/Desktop /, lstat не удался. Вам нужно построить путь, и вы всегда должны проверять код возврата от вызовов функций, таких как lstat.

0

Состояние cont < s.st_nlink инвертировано, < должно быть >.

(Это, как говорится, предпосылка нахождения «в» файл с самым низким количество жестких ссылок немного странно для меня, это очень вероятно, что любая реальная система будет иметь несколько файлов с 1 ссылка.)

+0

Это только, чтобы узнать это. Я изучаю экзамен по ОС. – Joe

Смежные вопросы