Forum: PC-Programmierung fopen() unter Linux


von lex (Gast)


Lesenswert?

Hallo,
ich möchte per fopen() eine Datei öffnen die sich im Releaseordner 
meines Eclipse Workspace befindet. Also da wo auch die kompilierte 
Binärdatei landet.

1:
1
file = fopen("~/cdt_workspace/test/Release/datei.txt", "r");
2:
1
file = fopen("datei.txt", "r");


Wobei die Variante 1. nicht funktioniert (Datei nicht gefunden).
Variante 2. klappt. Kann die Datei öffnen und daraus lesen.

Ich kompiliere im Eclipse, führe dann mein Programm aber in der Konsole 
aus.
Ich befinde mich im Ordner Release und starte mein Programm mit 
folgendem Aufruf.
1
./test

Variante 2 klappt, ist ja klar.
Aber Variante 1 mit der Absoluten Adressierung sollte doch auch gehen 
oder?
Ich kann ja auch per KATE die Datei per Absoluter Adressierung öffnen, 
ganz egal in welchem Verzeichnis ich mich befinde.

Jemand nen Vorschlag?

Grüße,
lex

von Malte _. (malte) Benutzerseite


Lesenswert?

Die ~ wird durch die Shell in den passenden /home/lex umgewandelt. In 
deinem Programm müsstest du das manuell machen.

von lex (Gast)


Lesenswert?

Ok...
Gibt es da irgendeine Variable die man abfragen könnte?
Bei mir ist es zwar nichts wichtiges und nur ne Spielerei, aber mir 
widerstrebt es den Usernamen hardzucoden :/

von Volker (Gast)


Lesenswert?

Unter Linux gibt es dafür die Umgebungsvariable HOME.
In C bekommst du dann den "Wert" mit getenv("HOME").
Also einen Pointer auf den Inhalt der Variable.

von lex (Gast)


Lesenswert?

Sehr schön Danke, muss ich morgen mal Testen.

Wird zwar jetzt bisl offtopic, aber interessieren würds mich noch:

Wie funktioniert das mit dem Pointer auf Umgebungsvariablen?
Läuft nicht jedes Programm (= Prozess?!) in seinem eigenen 
Speicherbereich?

Oder liegen die irgendwo besonders abgelegt?

(Erinntert mich ein wenig an die Frage hier vor ein paar Wochen wie man 
einen Spieletrainer programmiert. Ist es einfach so möglich den 
Speicherbereich des Spiels auszulesen?)

Gute Nacht beinand,
lex

von Georg A. (georga)


Lesenswert?

> Oder liegen die irgendwo besonders abgelegt?

Jeder Prozess bekommt beim Starten eine KOPIE der Umgebung des 
startenden Prozesses. Wenn da was geändert wird, bekommen das nur von da 
gestartete Prozesse mit.

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.