2009-05-22 88 views

回答

8

有一個fstat(2)函數。

NAME 統計,FSTAT,LSTAT - 獲取文件狀態

提要

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

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

你可以通過調用fileno(3)得到FD。

然後你可以打電話S_ISFIFO(buf)弄明白。

+2

可能值得一提:`S_ISFIFO(buf.st_mode)`這個宏不會爲您抓取結構。 – 2012-04-04 21:29:12

3

使用fstat()函數。但是,您需要使用fileno()宏從文件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

這是一個很好的例子,但對於一個沒有經驗的編碼器來說,這是沒有意義的。問答應始終歸結爲基本問題,以便其他具有類似問題的人可以在類似的背景下理解答案。問題是區分unix中的管道和文件。你的回答只是顯示如何解析統計模式。這是一個很好的例子,你沒有正確回答這個問題。這個問題的答案是`FILE * fp = fopen(path,「r」); int fd = fileno(fp); struct stat statbuf; fstat(fd,&statbuf);如果(S_ISFIFO(statbuf.st_mode))//它的管道!` – 2012-04-04 22:04:24