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

관련 정보