Ho il codice sottostante solo una parte di esso è mostrato qui e sto verificando se un tipo di file.Come capire se un file è un collegamento?
struct stat *buf /* just to show the type buf is*/
switch (buf.st_mode & S_IFMT) {
case S_IFBLK: printf(" block device\n"); break;
case S_IFCHR: printf(" character device\n"); break;
case S_IFDIR: printf(" directory\n"); break;
case S_IFIFO: printf(" FIFO/pipe\n"); break;
case S_IFLNK: printf(" symlink\n"); break;
case S_IFREG: printf(" regular file\n"); break;
case S_IFSOCK: printf(" socket\n"); break;
default: printf(" unknown?\n"); break;
}
Il problema: valore della st_mode
ottenuto quando faccio una printf("\nMode: %d\n",buf.st_mode);
il risultato è 33188.
ho provato il mio programma con un tipo di file regolare e un link simbolico. In entrambi i casi l'output era "file normale", il caso del collegamento simbolico non funziona e non riesco a capire perché?
La domanda è un po 'poco chiara. Stai testando un link simbolico e il programma dice che è un file normale? Qual è il valore di buf.st_mode? –
@Gintautas: modificato. –
È necessario 'lstat()'. 'stat()' segue i collegamenti simbolici e controlla i file a cui puntano. –