我有一個程序從一個文件「foo」的閱讀使用C++使用:檢查文件是一個命名管道(FIFO)在C++
pFile = fopen ("foo" , "r");
我希望它停止執行,如果該函數的其餘部分文件是一個命名管道。有沒有辦法在打開它之前檢查文件是否是命名管道?
我發現使用python完全相同的問題: Check if file is a named pipe (fifo) in python?我可以在C++中做類似的事嗎?
我有一個程序從一個文件「foo」的閱讀使用C++使用:檢查文件是一個命名管道(FIFO)在C++
pFile = fopen ("foo" , "r");
我希望它停止執行,如果該函數的其餘部分文件是一個命名管道。有沒有辦法在打開它之前檢查文件是否是命名管道?
我發現使用python完全相同的問題: Check if file is a named pipe (fifo) in python?我可以在C++中做類似的事嗎?
從man 2 stat
:
int fstat(int filedes, struct stat *buf);
...以下POSIX的宏定義使用st_mode字段來檢查文件類型:
S_ISFIFO(m) FIFO (named pipe)?
所以struct stat st; ... !fstat(fileno(pFile, &st) && S_ISFIFO(st.st_mode)
應該工作。
還有['S_ISFIFO(st.st_mode)'](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html#tag_13_62),它是 測試管道的宏或FIFO專用文件。目前尚不清楚您是否可以將管道與FIFO區分開來。 –
謝謝! S_ISFIFO(st.st_mode)是我正在尋找的.. – crypton480