Linux access() 系統呼叫顯示不一致的行為

Linux access() 系統呼叫顯示不一致的行為

對於某些檔案/目錄,系統呼叫 access() 報告:「沒有這樣的檔案或目錄」。所有目錄/檔案都具有請求的權限。他們的所有者/群組是我的登入 ID,下面發布的程式也是如此。此外,檔案總管顯示具有正確權限、擁有者/群組的所有檔案/目錄。

具體來說,對於某些子目錄/文件,我收到錯誤。但是對於我遇到錯誤的相同子目錄,所有檔案(和子目錄)都顯示沒有錯誤。

請問我缺什麼?

結構體 *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。

相關內容