我有一段 C 代码,具体来说是一个函数,它对 FILE*
进行操作。
根据打开 FILE*
的模式,有些事情我可以做,有些事情不能做。
有什么方法可以获取打开 FILE*
的模式?
那个 FILE*
是我可以依赖的所有信息,因为它是在程序的其他地方创建的,实际的文件名在它到达我的函数之前早就丢失了,我不能影响。
我更喜欢可移植解决方案。
编辑:我对指定哪些用户可以对文件做什么的文件限制不感兴趣。这几乎是无关紧要的,因为它是在打开文件时处理的。对于这段代码,我只关心打开模式。
最佳答案
在 POSIX(和足够相似的)系统上,fcntl(fileno(f), F_GETFL)
将以传递给 open 的形式返回打开文件的模式/标志
(不是 fopen
)。要检查它是以只读、读写还是只写方式打开的,您可以执行以下操作:
int mode = fcntl(fileno(f), F_GETFL);
switch (mode & O_ACCMODE) {
case O_RDONLY: ...
case O_WRONLY: ...
case O_RDWR: ...
}
您还可以检查 O_APPEND
等标志
关于c++ - 从 FILE 结构获取文件模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731672/