給定FILE *,是否可以確定底層類型?也就是說,是否有一個函數會告訴我FILE *是管道還是套接字還是常規的磁盤文件?在Unix中區分管道和文件
7
A
回答
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)
弄明白。
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
相關問題
- 1. 從unix中的管道分隔文件中刪除尾隨零
- 2. 在C和C++中區分unix目錄和文件
- 3. 在C UNIX shell中管道
- 4. C - stdin,unix管道和EOF
- 5. unix中共享內存和管道之間的區別?
- 6. 分叉,管道和文件操作
- 7. 管道輸出到多個文件中反覆地在Unix
- 8. 瞭解UNIX中的管道
- 9. unix中的命名管道
- 10. 管道在UNIX懷疑
- 11. 管道unix命令
- 12. Unix管道問題
- 13. UNIX管道故障
- 14. 瞭解UNIX管道和文件描述符
- 15. 在C中讀取/寫入UNIX管道
- 16. 在Unix中使用管道C
- 17. 在haskell中實現unix管道
- 18. 是否在c中使用「pipe(int pipefd [2])」創建了unix管道(|)和管道?
- 19. 從C外部文件(或控制文件)管道中的兩個文件unix
- 20. Unix的管道和重定向
- 21. Python argparse和Unix管道參數
- 22. Unix管道和位置參數
- 23. 使用fork和dup的Unix管道
- 24. Unix的管道 - 回波和貓
- 25. 管道併發和文件
- 26. UNIX編程,用fork,exec和管道進行分割屏幕
- 27. Unix C編程:多個管道和分支
- 28. 在$ _GET變量中分解和管道
- 29. 在Python中管道和分叉
- 30. 寫命令管道(UNIX)
可能值得一提:`S_ISFIFO(buf.st_mode)`這個宏不會爲您抓取結構。 – 2012-04-04 21:29:12