J'ai le code ci-dessous seulement une partie de celui-ci est montré ici et je vérifie si un le type de fichier.Comment savoir si un fichier est un lien?
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;
}
Le problème: la valeur de st_mode
obtenue quand je fais un printf("\nMode: %d\n",buf.st_mode);
le résultat est 33188.
J'ai testé mon programme avec un type de fichier régulier et un lien symbolique. Dans les deux cas, la sortie était "fichier régulier", c'est-à-dire que le cas du lien symbolique échoue et que je ne comprends pas pourquoi?
La question est un peu floue. Testez-vous un lien symbolique, et le programme dit que c'est un fichier régulier? Quelle est la valeur de buf.st_mode? –
@Gintautas: édité. –
Vous avez besoin de 'lstat()'. 'stat()' suit les liens symboliques et vérifie les fichiers vers lesquels ils pointent. –