我有一个程序使用C ++使用以下命令从文件“ foo”中读取:
pFile = fopen ("foo" , "r");
如果文件是命名管道,我希望它停止执行其余功能。有没有办法在打开文件之前检查文件是否是命名管道?
我使用python找到了完全相同的问题:检查文件是否是python中的命名管道(fifo)?我可以在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)
应该工作。
编辑:另请参见SzG的出色解答以及Brian对此的评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句