Problem mit access()
-
Hallo,
Ich habe ein Programm geschrieben, das die Zugriffsberechtigungen bei Dateien und Verzeichnisse mit access() überprüft. Was mich wundert, liefert access() nur bei "." und ".." 0 zurück, also zugriffsberechtigt. Aber ich kann doch auf alle Dateien und Verzeichnisse zugreifen. Kann jemand erklären?
Danke
-
Hi,
hast du einen absoluten Pfad uebergeben?
mfg
v R
-
Ja. Gibt es Unterschied?
Gruss
-
Eigentlich nicht.
Zeig mal Code. Und was sagt errno?
-
Hi,
If path cannot be found or if any of the desired access modes would not
be granted, then a -1 value is returned; otherwise a 0 value is returned.Sind die uebergebenen Zugriffsrechte gleich denen, die die Dateien haben?
mfg
v R
-
Der Code sieht so aus:
[edit] hab mal die code tabs korrigiert [/edit]
int main() { int i; DIR *directory; struct dirent *dir_entry; directory = opendir("/home/meinVerzeichnis"); while ((dir_entry = readdir(directory)) != NULL) { i = access(dir_entry->d_name, R_OK); if (i == 0) cout << "Ich darf " << dir_entry->d_name << " lesen." << endl; } closedir(directory); }
[ Dieser Beitrag wurde am 04.06.2003 um 18:33 Uhr von kingruedi editiert. ]
-
Vielleicht solltest du dir einfach mal die Dateinamen ausgeben lassen, bei denen es nicht klappt. Ich bin fast sicher, dann kriegst du's hin.
-
Bei mir funzt dein Programm wunderbar:
ahrlug# ./test dir_entry->d_name: . Ich darf . lesen. dir_entry->d_name: .. Ich darf .. lesen. dir_entry->d_name: test.c Ich darf test.c lesen. dir_entry->d_name: test Ich darf test lesen. ahrlug#
Ich habe das Verzeichnis auf '/tmp/test' gesetzt und noch eine Ausgabezeile
hinzugefuegt (wie man sehen kann (das "dir_entry->d_name: ")).mfg
v R
-
Das ist doch komisch. Mit dem Code kann ich nur die Dateien und Verzeichnisse
lesen, die sich mit dem Prog. im selben Verzeichnis befinden.
Gruss
-
Verstehst du's noch nicht? Aus dir_entry->d_name kriegst du nur die nackten Dateinamen, ohne Pfad. access kann doch nicht raten, welches Verzeichnis du dir vorher hast durchsuchen lassen ... es nimmt den Dateinamen, zb "foo.txt" und versucht darauf zuzugreifen. Da kein Pfad angegeben ist sucht er im aktuellen Verzeichnis.
-
Hi,
hab doch gesagt, access benoetigt den absoluten Pfad, access kann ja nicht zaubern
und direkt wissen, dass mit "irgendwas" "/usr/local/etc/irgendwas" gemeint ist
und nicht "/tmp/irgendwas".mfg
v R