2013-02-14 52 views
0

基本上我正在做一个html服务器任务,部分任务给出了“错误403 FORBIDDEN”消息,尽管我知道如何检查文件是否存在,我该如何检查它是否被禁止。如何检查C文件是否被禁止?

我正在做的是打开文件。

File* filein = fopen(pathname,"r"); 

请让我知道我能做些什么来检查文件是否被禁止。

回答

0

fopen()如果失败返回一个空指针。根据库的实现,全局变量errno可能被设置为指示失败的原因。

通常情况下,无效的文件权限会导致EACCES错误,因此失败fopen()后,检查是否errno等于EACCES(记得#include <errno.h>)。如果不是,由于其他与文件权限无关的其他错误,可能无法打开。

Here是您可以检查的其他一些错误常量的页面。

+0

我是否仅仅通过做类似如果(errno == EACCES)在尝试fopen之后? – Jaime 2013-02-14 03:48:27

+0

是的,这是正确的; 'errno'是一个整数,因此您可以用与其他任何整数相同的方式比较错误代码。 – Walfie 2013-02-14 03:54:02

1

我认为禁止的文件是不可访问的(例如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

+0

你可以检查errno的值,只记得导入errno.h。用'printf(“%d”,errno);'检查不同的错误代码。如果没有这样的文件错误代码是2,并且如果你没有权限打开它,那么错误代码是13或者像你刚刚问过的那样,'if(errno == EACCES)'也会起作用 – solusipse 2013-02-14 03:50:05