Der Systemaufruf access() meldet für einige Dateien/Verzeichnisse: „Keine solche Datei oder kein solches Verzeichnis“. Alle Verzeichnisse/Dateien haben die angeforderten Berechtigungen. Ihr Besitzer/ihre Gruppe ist meine Anmelde-ID, ebenso wie für das unten angegebene Programm. Außerdem zeigt der Dateimanager alle Dateien/Verzeichnisse mit den richtigen Berechtigungen, Besitzern/Gruppen an.
Insbesondere bei einigen Unterverzeichnissen/Dateien erhalte ich den Fehler. Aber bei denselben Unterverzeichnissen, bei denen der Fehler aufgetreten ist, werden alle Dateien (und Unterverzeichnisse) ohne Fehler angezeigt.
Was übersehe ich bitte?
Struktur 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;
}
Antwort1
Der an access() übergebene Name sollte absolut sein. In diesem Fall ist es die Verkettung von v[1], "/" und pDirent->d_name statt nur pDirent->d_name.