Linux access() 系统调用显示不一致的行为

Linux access() 系统调用显示不一致的行为

对于某些文件/目录,系统调用 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。

相关内容