시스템 호출 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()에 전달된 이름은 절대적이어야 합니다. 이 경우 pDirent->d_name 대신 v[1], "/" 및 pDirent->d_name을 연결합니다.