2013-02-14 56 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