【发布时间】:2021-04-19 20:32:10
【问题描述】:
我想打开一个文件,但可能会发生三种情况:
- 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指针带来优势,因为检查内存限制。
【问题讨论】:
-
"我想打开一个文件" 但是
access没有打开文件,所以你不能和fopen比较。跨度> -
@Fredrik 您如何在“open a文件”,然后。
-
@Fredrik On POSIX
errno在fopen返回NULL时被设置。在其他情况下,我不知道在使用fopen时是否可以以可移植的方式使用。在fopen之后检查access不是故障安全的,因为文件(或权限)总是有可能在两次调用之间发生更改。无论如何,如果这就是问题的实际问题,那么应该更清楚地重申它。 -
我可以使用
access进行检查(读取权限;文件存在),但也可以使用f == NULL。问题是,它们之间是否有任何区别。 -
你可以用
access检查权限,你可以用fopen读取文件(开始)。但是拥有文件的读取权限并不能保证读取它会成功。这些是完全不同的操作,你不能用一个代替另一个。
标签: c file-io file-permissions fopen file-access