2016-06-25 21 views
0

Grundsätzlich sollte dies ein einfacher Code sein, der einen Verzeichnisstrom öffnet und nach symbolischen Links sucht. Immer wenn ein symbolischer Link gefunden wird, sollte er gedruckt werden ("Symbolic link found"); Der lstat(dirp->d_name,&buf Aufruf gibt jedoch immer einen Wert < 0 zurück, und ich weiß nicht warum. Ich habe die zwei symbolischen Link, um die Datei-Ordner zu öffnen, ein Terminal-Fenster in den Ordner zu öffnen und laufen ln -s ciao.txt link1 und ln -s ciao2.txt link2 Ich weiß, ich closedir() später in meinem Code nennen sollte, bitte kümmern sich nicht um diese.lstat Rückgabe <0

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

void main (int argc, char* argv[]) 
{ 
    char buffer[100],dir[100]; 
    struct stat buf; 
    int x; 
    DIR *dp; 
    struct dirent *dirp; 
    if((dp=opendir(argv[1]))==NULL) 
    { 
     printf("\nError opening directory stream, now exiting...\n"); 
     exit(-1); 
    } 
    while((dirp=readdir(dp))!=NULL) 
     { 
      lstat(dirp->d_name,&buf); 
      if(S_ISLNK(buf.st_mode))  
       printf("\n%s Is a symbolic link\n",dirp->d_name); 
      else 
       printf("\n%s Is not a symbolic link\n",dirp->d_name); 



     } 


} 

Einige Hilfe wäre willkommen. Vielen Dank.

+0

ich den lstat Anruf überprüft, es kehrt <0 und ich weiß nicht, warum. –

Antwort

1

d_name ist der Dateiname im Verzeichnis, kein vollständiger Pfadname. Sie müssen chdir in das Verzeichnis, das Sie gerade betrachten, eingeben oder vollständige Pfadnamen für die Dateien erstellen.

Die einfachste Lösung ist diese Zeile kurz vor Ihrer while Schleife hinzuzufügen:

chdir(argv[1]); 
+0

Danke für die schnelle Antwort. Grundsätzlich, wenn ich das "meinen Weg" machen wollte, würde ich einen vollständigen Pfadnamen wie/home/myuser/Desktop/myfile usw. brauchen, richtig? –

+0

Ja, wenn Sie 'chdir' nicht verwenden möchten, müssen Sie den vollständigen Pfadnamen der Datei erstellen. (Oder, um vollständig zu sein, können Sie auch einen relativen Pfadnamen verwenden, z. B. '../../../ Desktop/myfile'.) –

+0

Vielen Dank, es ist jetzt klar. –