基本上我正在做一个html服务器任务,部分任务给出了“错误403 FORBIDDEN”消息,尽管我知道如何检查文件是否存在,我该如何检查它是否被禁止。如何检查C文件是否被禁止?
我正在做的是打开文件。
File* filein = fopen(pathname,"r");
请让我知道我能做些什么来检查文件是否被禁止。
基本上我正在做一个html服务器任务,部分任务给出了“错误403 FORBIDDEN”消息,尽管我知道如何检查文件是否存在,我该如何检查它是否被禁止。如何检查C文件是否被禁止?
我正在做的是打开文件。
File* filein = fopen(pathname,"r");
请让我知道我能做些什么来检查文件是否被禁止。
fopen()
如果失败返回一个空指针。根据库的实现,全局变量errno
可能被设置为指示失败的原因。
通常情况下,无效的文件权限会导致EACCES
错误,因此失败fopen()
后,检查是否errno
等于EACCES
(记得#include <errno.h>
)。如果不是,由于其他与文件权限无关的其他错误,可能无法打开。
Here是您可以检查的其他一些错误常量的页面。
我认为禁止的文件是不可访问的(例如chmod 440设置为不运行服务器的用户),所以当由于缺乏权限而无法打开文件时,可以通知用户有关该文件的示例代码:
#include <stdio.h>
int main()
{
FILE *file = fopen("file.txt", "r");
if (file == NULL)
perror("Error");
fclose(file);
return 0;
}
记住,使文件无法访问 - 例如chmod 000 file.txt
你可以检查errno的值,只记得导入errno.h。用'printf(“%d”,errno);'检查不同的错误代码。如果没有这样的文件错误代码是2,并且如果你没有权限打开它,那么错误代码是13或者像你刚刚问过的那样,'if(errno == EACCES)'也会起作用 – solusipse 2013-02-14 03:50:05
我是否仅仅通过做类似如果(errno == EACCES)在尝试fopen之后? – Jaime 2013-02-14 03:48:27
是的,这是正确的; 'errno'是一个整数,因此您可以用与其他任何整数相同的方式比较错误代码。 – Walfie 2013-02-14 03:54:02