c++ - 从 FILE 结构获取文件模式?

标签 c++ c file-io

我有一段 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/

相关文章:

c++ - 如果对象大小 > 缓存行,空间局部性对缓存性能有影响吗?

c++ - C++中比较语句的含义

c++ - 为什么 swap() 有时会通过传递数组来实现?

c - 如何在eclipse中使用不同的 'C'项目运行客户端-服务器套接字程序?

c - 变量 'ch' 周围的堆栈已损坏

c++ - 用于打开资源文件并从中获取数据的 Win32 api

c++ - 在 C++ 中的 unordered_map 中查找最大键

c - 结构数组在声明时存储垃圾

c - 如何以这样的方式打开文件:如果文件不存在,则会自动创建并打开该文件?

python - 无法写入文件