我有一个程序从一个文件“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