如何解决访问与 F_OK|R_OK 和检查空指针之间的区别?
我想打开一个文件,但可能会发生以下三种情况:
- fopen() 不会分配所有内容(例如内存限制)。
- 该文件不存在。
- 我没有读取权限。
我知道检查 NULL
指针:
FILE *f = fopen(fname,"r");
if (f == NULL) {
//
}
但我也知道access()
:
if (access(fname,F_OK|R_OK) != 0) {
//
}
我试图删除对文件的权限检查,只使用 NULL
指针的检查。它适用于所有情况。
使用 access()
和 F_OK|R_OK
和检查 NULL
指针有什么区别?
如果由于检查内存限制,我们不会对检查 NULL
指针有利。
解决方法
使用带有 F_OK|R_OK 的 access() 和检查 NULL 指针有什么区别?
两者没有可比性。即使您首先使用 access()
执行成功测试,您仍然需要对 fopen()
进行空检查,如果失败,您仍然不知道为什么不检查 errno
.另一方面,如果您第一次使用 access()
执行un成功的测试,这并不能肯定地告诉您后续的 fopen()
会失败。 access()
失败和 fopen()
失败告诉你不同的事情。
这里的部分问题是计算系统是动态的。例如,仅仅因为我现在不存在或无法访问文件并不意味着它不会在现在和现在之间的某个时间点被创建或访问 + t,即使对于非常小的 。如果您打算在可能的情况下打开文件,那么最好的方法是直接尝试打开它。检查是否成功很重要,但以编程方式评估任何失败的原因通常并不重要。 perror()
和 sys_errlist
提供了生成适当用户反馈的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。