给定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