Tengo el siguiente código . Solo una parte se muestra aquí y estoy comprobando si es del tipo de archivo.¿Cómo saber si un archivo es un enlace?
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;
}
El problema: valor de st_mode
obtenido cuando hago un printf("\nMode: %d\n",buf.st_mode);
el resultado es 33188.
Probé mi programa con un tipo de archivo normal y un enlace simbólico. En ambos casos, la salida fue "archivo regular", es decir, el caso del enlace simbólico está fallando y no entiendo por qué?
La pregunta es un poco confusa. ¿Estás probando un enlace simbólico y el programa dice que es un archivo común? ¿Cuál es el valor de buf.st_mode? –
@Gintautas: editado. –
Necesita 'lstat()'. 'stat()' sigue a los enlaces simbólicos y verifica los archivos a los que apuntan. –