Forum: PC-Programmierung Linux Programmstart aus Console


von hiall (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

hiall schrieb:
> Woran kann das liegen gibt es
> bei den beiden Aufrufen unterschiede?

ja das Arbeitsverzeichnis ist unterschiedlich.

von Dominik S. (dasd)


Lesenswert?

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

von hiall (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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.

von foobar (Gast)


Lesenswert?

Kommt auf die Programmiersprache an, in Python macht man das schon so...

von Peter II (Gast)


Lesenswert?

foobar schrieb:
> Kommt auf die Programmiersprache an, in Python macht man das schon so...

dann kommt bestimmt aber kein "Segmentation Fault"

von Vn N. (wefwef_s)


Lesenswert?

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.

von foobar (Gast)


Lesenswert?

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.

von Quak (Gast)


Lesenswert?

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.

von foobar (Gast)


Lesenswert?

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.

von Quak (Gast)


Lesenswert?

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.

von foobar (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.