Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Probleme mit der stat() Funktion

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
02.09.2003, 12:32 Uhr
typecast
aka loddab
(Operator)


Ich habe ein Programm das mit Hilfe der stat() Funktion Eigenschaften der Verzeichnisse holt. Wenn das Verzeichnis existiert, dann funktioniert es gut, aber wenn das Verzeichnis nicht existiert bekomme ich einen Segmentation Fault. Hier mal der Ausschnitt aus dem Code bei dem der Fehler auftritt:

C++:
        if (stat(path, sb) == -1) // <-- hier kommt der Seg Fault
        {
                fprintf(stderr, "Es trat der Fehler %s auf", errno);
                ...
        }


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.09.2003, 12:38 Uhr
Pablo
Supertux
(Operator)


Ich finde in meinem Buch gar nichts zu den Fehlern von stat, ich finde aber logisch, dass es gar nicht geht, wenn du nach Attributen von einem Ordner suchst, der gar nicht existiert. Wie wäre es, wenn du zuerst nach dem Ordner suchst? Ich meine, überprüfe, ob der Ordner überhaupt existiert.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.09.2003, 12:46 Uhr
Pablo
Supertux
(Operator)


Ich glaube, das kannst du so machen:


C++:
strcuct stat statpuff;
...
if (lstat(pfadname, &statpuff) < 0)
     //return fehler-bei-stat oder behandle hier den Fehler
if (S_IDIR(statpuff.st_mode) == 0)
    // return kein-Verzeichnis oder behandle hier den Fehler


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.09.2003, 12:48 Uhr
typecast
aka loddab
(Operator)


Laut man-page sollte es aber funktionieren. Da steht:

Zitat:

...
RETURN VALUES
Upon successful completion, the value 0 is returned; otherwise the
value -1 is returned and the global variable errno is set to indicate the
error.
...
ERRORS
Stat() and lstat() will fail if:
...
[ENOENT] The named file does not exist.
...



Deswegen dachte ich mir, dass es unnötig ist zu überprüfen, ob das Verzeichnis existiert
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.09.2003, 12:50 Uhr
Pablo
Supertux
(Operator)


Finde ich auch komisch, dass du den Fehler bekommst. Ich hab meinen Vorschalg in einem Buch (Linux · Unix Systemprogrammierung) gefunden. Das Programm macht dasselbe wie tree und das Programm hat genau bevor das richtige Einlesen der Verzeichnisse gemacht.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.09.2003, 12:56 Uhr
typecast
aka loddab
(Operator)


Ich habe jetzt mal den stat bzw lstat durch access() vertauscht und es passiert das gleiche.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.09.2003, 13:17 Uhr
ao

(Operator)



Zitat:
Loddab postete

C++:
        if (stat(path, sb) == -1) // <-- hier kommt der Seg Fault
        {
                fprintf(stderr, "Es trat der Fehler %s auf", errno);
                ...
        }




Wie sind path und sb deklariert?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.09.2003, 13:21 Uhr
typecast
aka loddab
(Operator)


Ich hab jetzt das nach Pablos Methode ein bisschen verändert:

C++:
char path[40]
struct stat sb;

....
if (stat(path, &sb) == -1)
...


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.09.2003, 13:30 Uhr
Pablo
Supertux
(Operator)


Kann es sein, dass stat und lstat und fstat nur für Dateien funktioniert? Hier steht nämlich: Um Attribute von Dateien zu erfragen....

Ich finde noch keine Information dazu, ich muss ein Programmchen dafür schrieben, vielleicht klappt es bei mir.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.09.2003, 13:38 Uhr
typecast
aka loddab
(Operator)


Ich bin eigentlich davon ausgegangen, das unter Linux/Unix Verzeichnisse nur spezielle Dateien sind. Liege ich da falsch?
Aber selbst wenn das nicht der Fall ist, darf doch kein Segmentation Fault auftreten. Dann müsste eigenlich doch der Error File Not Found kommen, oder?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: