我有一个正在尝试读取文件的 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
有什么建议么?