Básicamente tengo que escribir un clon del comando ls de UNIX para una clase, y tengo casi todo funcionando. Una cosa que parece que no sé cómo hacer es verificar si un archivo es un enlace simbólico o no. Desde la página man para stat()
, veo que hay un valor mode_t
definido, S_IFLNK
.¿Cómo se determina el uso de stat() si un archivo es un enlace simbólico?
Ésta es la forma en que estoy tratando de comprobar si un archivo es un sim-enlace, sin suerte (nota, stbuf es el buffer que stat()
devuelven los datos de inodos en):
switch(stbuf.st_mode & S_IFMT){
case S_IFLNK:
printf("this is a link\n");
break;
case S_IFREG:
printf("this is not a link\n");
break;
}
Mi código SIEMPRE imprime this is not a link
, incluso si lo es, y sé de hecho que dicho archivo es un enlace simbólico ya que el comando ls real lo dice, además he creado el enlace simbólico ...
¿Alguien puede detectar lo que yo pueda? estar haciendo mal? ¡Gracias por la ayuda!
Citando de mi página de manual de stat (2): lstat() es idéntica a stat(), excepto que si la ruta es un enlace simbólico, entonces el enlace en sí mismo es stat-ed, no el archivo al que se refiere. – Philip