access(2)在POSIX中使用.在标准C中,您可以做的最好是尝试打开它,fopen()看看它是否成功.
如果fopen()返回NULL,您可以尝试用来errno区分"文件不存在"(errno == ENOENT)和"权限被拒绝"(errno == EACCES)情况 - 但不幸的是这两个errno值也只是由POSIX定义.
(即使在POSIX上,在大多数情况下,最好的办法是尝试打开文件,然后查看失败的原因,因为使用access()引入了明显的竞争条件).
使用access()函数:
if (access(pathname, R_OK) == 0)
{
/* It's readable by the current user. */
}
Run Code Online (Sandbox Code Playgroud)
errno将被设置为ENOENT,如果该文件不存在,或者EACCES如果它存在,但不是当前用户访问.有关更多错误代码,请参见手册页.