2009-05-22 11 views

risposta

8

C'è una funzione fstat(2).

NOME stat, fstat, lstat - ottenere lo stato del file

SINOSSI

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

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

È possibile ottenere il fd chiamando fileno(3).

Quindi è possibile chiamare S_ISFIFO(buf) per capirlo.

+2

avrebbe potuto essere degno di nota: 'S_ISFIFO (buf.st_mode)' Questa macro non strisciare la struttura per voi. –

3

Utilizzare la funzione fstat(). Tuttavia, è necessario utilizzare la macro fileno() per ottenere il descrittore di file dalla struttura FILE del file.

#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

Questo è un buon esempio, ma per un coder inesperto non ha senso. Le domande e risposte dovrebbero sempre essere generalizzate al problema di base in modo che altre persone con problemi simili possano comprendere la risposta in contesti simili. La domanda era distinguere una pipe da un file in unix. La tua risposta mostra solo come analizzare una modalità stat. È un ottimo esempio per cui non hai risposto correttamente alla domanda. La risposta a questa domanda è 'FILE * fp = fopen (path," r "); int fd = fileno (fp); struct stat statbuf; fstat (fd, & statbuf); se (S_ISFIFO (statbuf.st_mode)) // è una pipe! ' –

Problemi correlati