2009-05-22 13 views

Respuesta

8

Hay una función fstat(2).

NOMBRE stat, fstat, lstat - obtener el estado del archivo

SINOPSIS

#include <sys/types.h> 
    #include <sys/stat.h> 
    #include <unistd.h> 

    int fstat(int fd, struct stat *buf); 

Puede obtener el fd llamando fileno(3).

Luego puede llamar al S_ISFIFO(buf) para averiguarlo.

+2

podría haber sido útil mencionar: 'S_ISFIFO (buf.st_mode)' esta macro no rastrea la estructura por usted. –

3

Utilice la función fstat(). Sin embargo, deberá usar la macro fileno() para obtener el descriptor de archivo del archivo FILE struct.

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

FILE *fp = fopen(path, "r"); 
int fd = fileno(fp); 
struct stat statbuf; 

fstat(fd, &statbuf); 

/* a decoding case statement would be good here */ 
printf("%s is file type %08o\n", path, (statbuf.st_mode & 0777000); 
+2

Este es un buen ejemplo, pero para un codificador inexperto no tiene sentido. Las preguntas y respuestas siempre deben generalizarse al problema base para que otras personas con problemas similares puedan entender la respuesta en contextos similares. La pregunta era distinguir una tubería de un archivo en Unix. Tu respuesta solo muestra cómo analizar un modo de estadísticas. Es un gran ejemplo que simplemente no respondió la pregunta correctamente. La respuesta a esta pregunta es 'FILE * fp = fopen (ruta," r "); int fd = fileno (fp); struct stat statbuf; fstat (fd, & statbuf); if (S_ISFIFO (statbuf.st_mode)) // ¡es una pipa! ' –

Cuestiones relacionadas