如何检查已打开的文件指针的访问模式?
所以说一个函数传递一个已经打开的文件指针:
//Pseudo code
bool PseudoFunction(FILE *Ptr)
{
if(... Insert check for read-only access rights)
{
//It's read only access mode
return true;
}
//File pointer is not read-only and thus write operations are permitted
return false;
}
我会在使用if语句来检查文件指针什么作为已经以只读方式打开(或不作为的情况下可能),而不写入文件,也不依赖于用户传递(可能矛盾)的参数?
系统是windows,code :: blocks编译器,但是为了代码的可移植性,交叉兼容性是首选。
请注意,这不是询问文件权限,而是FILE指针使用了什么访问模式。
自答 [无法单独回答追加由于用户权限的限制]:
有由另外的海报一个更好的答案下面,其中包括适当的#define
正如前面建议,看起来FILE指针的_flag(在_iobuf下定义)是了解文件是否只读的关键。您的里程可能虽然有所不同,但相同的基本概念应该是很容易适应,例如代码:
#define READ_ONLY_FLAG 1
bool PrintFlagPtr(const char FileName[], const char AccessMode[])
{
FILE *Ptr = NULL;
Ptr = fopen(FileName,AccessMode);
printf("%s: %d ",AccessMode,Ptr->_flag);
int IsReadOnly = Ptr->_flag;
fclose(Ptr);
Ptr = NULL;
if((IsReadOnly&READ_ONLY_FLAG) == READ_ONLY_FLAG)
{
printf("File is read only!\n");
return true;
}
printf("\n");
return false;
}
也就是说,当所有的不同的访问模式的组合与上述功能使用时,产生的输出:
Output:
w: 2
r: 1 File is read only!
a: 2
wb: 2
rb: 1 File is read only!
ab: 2
w+: 128
r+: 128
a+: 128
w+b: 128
r+b: 128
a+b: 128
我很好奇,为什么这是从来没有建议(或从未使用),给定一个交叉兼容的前端功能(简单地说是一个名称相同的函数,声明依赖于平台)传递一个const int来源于因为FILE指针_flag将是相当简单和容易解决问题的解决方案。
-08-11
SSight3
+0
避免使用oracle来发现程序中已知的内容。一些代码创建了FILE,该代码也知道它是如何创建的。给你的函数添加一个参数。 –
+0
事实上,依靠用户告诉我们一个文件具有什么样的访问权限是不好的形式(如上所述),因为这是一个安全漏洞。这是编程,而不是预测 - 部分代码已经知道访问权限是为了在使用putc和类似命令时能够出错。 –
+0
不知道为什么你认为用户与此有任何关系。它需要C程序员将参数传递给函数。如果你不相信程序员,那么所有的投注都关闭。 –
如果觉得《c语言读取acc文件的采样率 C语言文件操作:打开检查文件指针访问模式》对你有帮助,请点赞、收藏,并留下你的观点哦!