基本上我正在做一個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