對於某些檔案/目錄,系統呼叫 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。