ファイルを読み込もうとしている 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
助言がありますか?