对于某些文件/目录,系统调用 access() 报告:“没有这样的文件或目录”。所有目录/文件都具有请求的权限。它们的所有者/组是我的登录 ID,正如下面发布的程序一样。此外,文件管理器显示所有具有正确权限、所有者/组的文件/目录。
具体来说,对于某些子目录/文件,我收到错误。但对于我收到错误的相同子目录,所有文件(和子目录)均显示无错误。
请问我遗漏了什么?
结构dirent *pDirent;
int main(int c, char** v) {
DIR *pDir = opendir(v[1]);
if (!pDir) {
cout << "Could not open: " << v[1] << endl;
return 0;
}
while ((pDirent = readdir(pDir)) != NULL) {
if (pDirent->d_name[0] == '.') continue;
if (pDirent->d_type == DT_DIR) {
if (access(pDirent->d_name, X_OK)) {
cout << pDirent->d_name << " Error: " << dec << errno << ' ' << strerror(errno) << endl;
}
else cout << pDirent->d_name << endl;
}
else if (pDirent->d_type == DT_REG) {
if (access(pDirent->d_name, R_OK | W_OK)) {
cout << pDirent->d_name << " Error: " << dec << errno << ' ' << strerror(errno) << endl;
}
else cout << pDirent->d_name << endl;
}
else continue;
}
return 0;
}
答案1
传递给 access() 的名称应该是绝对名称。在这种情况下,它将是 v[1]、"/" 和 pDirent->d_name 的串联,而不仅仅是 pDirent->d_name。