我有一個正在嘗試讀取文件的c程序。使用access()
命令它說文件在那裏,但fopen()
返回NULL,errno說該文件不存在。access()表示文件存在,但fopen()表示不存在
代碼截斷片段:
FILE *fp;
char *filename = strdup(git_dir);
strcat(filename, "/HEAD");
printf(git_dir);
printf(":");
printf(filename);
printf(":");
if (access(filename, F_OK)) {
printf("Y U NO OPEN:");
}
fp = fopen(filename, "r");
if (fp == NULL) {
printf(strerror(errno));
return;
}
正如你可能從代碼告訴,這是試圖打開一個Git倉庫的git的/封頭文件。這個失敗的特定存儲庫被克隆到另一個存儲庫的子目錄中,然後添加爲子模塊。我沒有通過運行git submodule update
命令克隆的問題。
上面的代碼不會打印「Y U NO OPEN:」,但它確實打印出strerror()
。我將文件名打印到屏幕上,並用less
打開文件,並打開它。該程序生成的zsh我的提示,所以我想這是由我的身份運行,該文件的權限
-rw-r--r-- 1 ben users 23 Jun 30 13:32 HEAD
有什麼建議?
什麼printf(strerror(errno))打印? –
@ AlexG.P .:你可以使用'perror(「ERROR」)'代替。 – Jack
打印的錯誤是「文件不存在」的效果 – ben