从FILE结构获取文件模式?

时间:2015-04-19 15:10:42

标签: c++ c file-io

我有一段C代码,一个特定的函数,它在FILE*上运行。

根据FILE*打开的模式,我可以做什么,不能做什么。

有什么方法可以获得FILE*打开的模式吗?

FILE*是我可以依赖的所有信息,因为它是在程序的其他地方创建的,实际的文件名在它到达我的函数之前就已经很久了,而且我无法影响。

我更喜欢便携式解决方案。

编辑:我对文件限制不感兴趣,指定哪些用户可以对文件执行哪些操作。这大多无关紧要,因为它是在文件打开时处理的。对于这段代码,我只关心开放模式。

2 个答案:

答案 0 :(得分:4)

在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等标志

答案 1 :(得分:0)

假设Linux / Unix:

请参阅fstat(),以获取文件权限的详细信息。

为该函数获取文件描述符fileno()