Hallo, ich habe mal eine Frage zum Starten von Programmen aus der Console. Ich starte ein Programm mit ./Name und es läuft wie es soll. Wennn ich es jedoch aus einem anderen Verzeichnis Pfad/Pfad/Name starte bekommen ich zur Laufzeit ein Segmentation Fault. Woran kann das liegen gibt es bei den beiden Aufrufen unterschiede? Danke
hiall schrieb: > Woran kann das liegen gibt es > bei den beiden Aufrufen unterschiede? ja das Arbeitsverzeichnis ist unterschiedlich.
Peter II schrieb: > ja das Arbeitsverzeichnis ist unterschiedlich Genau. Arbeitsverzeichnis ist immer das Verzeichnis aus dem gestartet wird. Bei ./Name ist es eben nimmer das richtige, mit /Pfad/Name meist nicht :) Lösungsmöglichkeit 1: Wenn es dein eigenes Programm ist kannst du das Arbeitsverzeichnis per "chdir()" aufruf beim Programmstart entsprechend setzen. Möglichkeit 2: Wenn du keinen Zugriff auf den Programmcode hast kannst du ein Skript als "Wrapper" benutzen. Im Skript zuerst ins Verzeichnis des Programms wechseln und dann starten. Aufrufen tust du dann eben /Pfad/Skriptname
Ja danke für die schnellen Antworten. Es lag tatsächlich daran, da ich eine Config Datei auslese und diese beim Aufruf Pfad/Pfad/Name dann ja nicht vorhanden ist. War mir bis jetzt nicht klar das sich das Arbeitsverzeichnis dann ändert. Danke :D
dann solltest du aber schnell deine Fehlerbehandlung überarbeiten. Man sollte wenn man Dateien öffnen auch Prüfen ob sie geöffnet wurde und nicht einfach los-lesen.
Kommt auf die Programmiersprache an, in Python macht man das schon so...
foobar schrieb: > Kommt auf die Programmiersprache an, in Python macht man das schon so... dann kommt bestimmt aber kein "Segmentation Fault"
foobar schrieb: > Kommt auf die Programmiersprache an, in Python macht man das schon so... Natürlich fängst du die Exception entsprechend ab. Und wenn nicht du, dann jeder, der halbwegs vernünftig programmiert. Peter II schrieb: > dann kommt bestimmt aber kein "Segmentation Fault" Nein, aber es stürzt mit einer Exception ab, wenn du diese nicht abfängst, läuft also aufs selbe raus.
vn nn schrieb: > Natürlich fängst du die Exception entsprechend ab. Und wenn nicht du, > dann jeder, der halbwegs vernünftig programmiert. Klar, aber die Antwort war auch auf den Beitrag bezogen, dass man das Öffnen prüft, das tut man nämlich in dem Fall nicht und lässt sich halt eine Exception werfen beim Lesen. Das man die auch abfangen sollte steht ausser Frage.
foobar schrieb: > Klar, aber die Antwort war auch auf den Beitrag bezogen, dass man das > Öffnen prüft, das tut man nämlich in dem Fall nicht und lässt sich halt > eine Exception werfen beim Lesen. Das man die auch abfangen sollte steht > ausser Frage. Wenn "man" das tut, programmiert "man" Mist zusammen. Aber das erklaert den vermeintlichen Vorteil von solchen Sprachen: Fehlerbehandlung macht, wenn sie richtig gemacht wird, 80% vom Code aus. Laesst man sie weg, ist man natuerlich produktiver - bis es knallt. Dann steht man alleine im Wald, weil Fehler nicht dort gemeldet werden, wo sie passieren, sondern sonstwo.
Das hat rein garnichts damit zu tun keine Fehlerbehandlung zu machen. Sondern damit wie die Fehlerbehandlung gemacht wird, entweder wie zB in C als "Look Before You Leap" oder wie in Python als "It's Easier to Ask Forgiveness Than Permission". Auch wenn der Anteil an Fehlerbehandlung womöglich nur mehr 78% vom Code ausmacht.
foobar schrieb: > "It's Easier to Ask Forgiveness Than Permission". Nur weil's einen coolen Namen hat, wird es nicht besser. Im Gegenteil, das ist ja heutzutage ueblich, schlechte Angewohnheiten einfach zum innovativen Entwicklungsstil zu erklaeren. Auf die von mir geschilderte Problematik gehst du ueberhaupt nicht ein.
Quak schrieb: > Im Gegenteil, > das ist ja heutzutage ueblich, schlechte Angewohnheiten einfach zum > innovativen Entwicklungsstil zu erklaeren. Achso, du bist von der Früher-war-alles-besser-Fraktion? Fehler werden nicht sonstwo gemeldet, immerhin schreibst du selbst den Code und bist selbst verantwortlich wieviel auf einmal in einem try Block landet. Wenn ich zb den errno zu spät prüfe, bin ich ja auch selbst schuld und kann auch nicht mehr sagen wo der Fehler aufgetreten ist. Aber das wusstest du eh. Es ging dir ja nur um eine Rumstreiterei.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.