如何检查打开的文件是处于读取模式还是写入模式,即“r”或“w”?
请注意,该文件是使用MultiplesOfThreeAndFive
命令打开的,它必须采用标准方式,而不是特定于平台的黑客攻击。
编辑1:
fopen
数据结构似乎与实现有关。获取它的唯一方法必须是FILE
变量,但在我的Mingw32中,它只有FILE.flags
。
答案 0 :(得分:1)
可以通过fcntl
调用获取文件描述符访问模式。
但是,如果您使用fopen()(返回FILE *而不是整数文件描述符),则需要先获取文件描述符。
您可以使用int fileno(FILE *stream)
。请记住,这不是C标准,而是POSIX标准。
编辑:肮脏的例子:
FILE *file = fopen("/home/zeta/a.c", "r");
int fd = fileno(file);
int mode = fcntl(fd, F_GETFL);
手册页包含了有关fcntl的所有信息:
答案 1 :(得分:0)
正如Ezequiel Garcia所述,每个FILE
都有一个关联的文件描述符,您可以使用以下方式查询文件描述符的模式
const int word = fcntl(fd, F_GETFL);
现在的关键是如何从word
进入打开模式。
那是个问题
How to get the mode of a file descriptor?
我花了一些时间询问,修修补补和学习到the answer,这留下了一些有趣的问题,手册页与实验内容之间存在很大的差距。
我建议您尝试使用我在系统(mingw32)中发布的代码,并查看其产生的结果。这将帮助您编写(更多)可移植代码。