在Unix中区分管道和文件

pal*_*ogt 7 c unix file pipe manpage

给定FILE*,是否可以确定基础类型?也就是说,是否有一个函数可以告诉我FILE*是管道还是套接字还是普通的磁盘文件?

ala*_*mar 8

有一个fstat(2)功能.

NAME stat,fstat,lstat - 获取文件状态

概要

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

   int fstat(int fd, struct stat *buf);
Run Code Online (Sandbox Code Playgroud)

你可以通过电话获得fd fileno(3).

然后你可以打电话S_ISFIFO(buf)来搞清楚.

  • 可能值得一提的是:`S_ISFIFO(buf.st_mode)`这个宏不会为你抓取结构. (4认同)