2009-05-22 5 views

Antwort

8

Es gibt eine fstat(2) Funktion.

Name stat, fstat, lstat - get Dateistatus

SYNTAX

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

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

Sie können die fd erhalten, indem fileno(3) aufrufen.

Dann können Sie S_ISFIFO(buf) anrufen, um es herauszufinden.

+2

könnte erwähnenswert gewesen sein: 'S_ISFIFO (buf.st_mode)' dieses Makro crawlt nicht die Struktur für Sie. –

3

Verwenden Sie die Funktion fstat(). Sie müssen jedoch den fileno() -Makro verwenden, um den Dateideskriptor aus der Datei FILE struct abzurufen.

#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

Dies ist ein gutes Beispiel, aber für einen unerfahrenen Programmierer macht es keinen Sinn. F & A sollte immer auf das Basisproblem verallgemeinert werden, damit andere, die ähnliche Probleme haben, die Antwort in ähnlichen Kontexten verstehen können. Die Frage war, eine Pipe von einer Datei in Unix zu unterscheiden. Ihre Antwort zeigt, wie Sie einen Statistikmodus parsen. Es ist ein großartiges Beispiel, dass Sie die Frage nicht richtig beantwortet haben. Die Antwort auf diese Frage lautet: FILE * fp = fopen (Pfad, "r"); int fd = Dateino (fp); struct stat statbuf; fstat (fd, & statbuf); if (S_ISFIFO (statbuf.st_mode)) // es ist eine Pipe! ' –

Verwandte Themen