ファイルを読み込もうとしている ac プログラムがあります。access()
コマンドを使用すると、ファイルが存在すると表示されますが、 fopen()
NULL が返され、errno はファイルが存在しないと表示されます。
コードの切り捨てられたスニペット:
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/HEADS ファイルを開こうとしています。これが失敗している特定のリポジトリは、別のリポジトリのサブディレクトリに複製され、サブモジュールとして追加されました。git submodule update
コマンドを実行して複製された問題はありません。
上記のコードは「YU NO OPEN:」を出力しませんが、strerror()
. ファイル名を画面に出力してファイルを開いたところ、less
正常に開きました。このプログラムは私のzshプロンプトを生成しているので、私のユーザーによって実行されていると思います.ファイルのパーミッションは
-rw-r--r-- 1 ben users 23 Jun 30 13:32 HEAD
助言がありますか?