Forum: PC-Programmierung Wie funktioniert das mit den Pfaden unter Linux?


von Borislav B. (boris_b)


Lesenswert?

Hallo!
Ich schreibe gerade ein kleines Tool, das Log-Daten erzeugen soll. Unter 
Windows ist die dafür notwendige Pfadangabe ja recht einfach:

TextWriter tw = new StreamWriter(@"MeinLog.txt");
(So landet das Log direkt neben der exe)

Wie sieht das nun unter Linux aus? Hier würde ich die Dateien gerne auf 
einem USB Stick ablegen, da es sich um einen Raspberry Pi handelt (die 
SD Karte soll nicht zu arg leiden).

-> Wenn ich das Programm direkt vom USB Stick starte, legt dieses die 
Log Datei dann direkt "neben sich" (also auch auf dem Stick) ab?
-> Wie komme ich überhaupt an den USB-Stick - Muss ich diesen erst 
"mounten"? (Plug and Play?)

Danke!

von kopfkratzer (Gast)


Lesenswert?

kopfkratz
GOOGLE schon wieder kaputt oder Angst die NSA lönnte mit den Infos 
bessere Trojaner bauen ?
http://www.thegeekstuff.com/2012/07/c-file-handling/
Und ja es wird wenn kein expliziter Pfad angegeben wird . genommen ...

von user (Gast)


Lesenswert?

Du kannst entweder einen absoluten Pfad (zB. "/var/log/abc") angeben 
oder auch ein relativen (zB. "./abc")

von Εrnst B. (ernst)


Lesenswert?

Boris B. schrieb:
> (So landet das Log direkt neben der exe)

Genau das macht man unter unix nicht.
Logfiles gehören nach "/var/log/<programmname>.log" für systemweite 
Programme, oder eben ins User-Homeverzeichnis (des Users, der das 
Program ausführt!), bzw ein Unterverzeichnis davon.

user schrieb:
> oder auch ein relativen (zB. "./abc")

der ist aber Relativ zum aktuellen Arbeits-Verzeichnis, nicht relativ 
zum Installationsort des Programmes!

d.H. bei
> cd /tmp
> /usr/local/bin/meinTollesProgramm
würde das Logfile in /tmp/abc landen.

von Konrad S. (maybee)


Lesenswert?

Boris B. schrieb:
> TextWriter tw = new StreamWriter(@"MeinLog.txt");
> (So landet das Log direkt neben der exe)

Hm, ich hätte gedacht, es landet in aktuellen Verzeichnis, so wie bei 
Linux auch. Meinst du nicht, dass du diesbezüglich einem Irrtum 
unterliegst?

von G. C. (_agp_)


Lesenswert?

Boris B. schrieb:
> Hallo!
> Ich schreibe gerade ein kleines Tool, das Log-Daten erzeugen soll. Unter
> Windows ist die dafür notwendige Pfadangabe ja recht einfach:
>
> TextWriter tw = new StreamWriter(@"MeinLog.txt");
> (So landet das Log direkt neben der exe)

Das wird dann nicht mehr funktionieren, wenn jemand dein Tool ins 
Windows Programme-Verzeichnis verschiebt.

;)

von bluppdidupp (Gast)


Lesenswert?

Boris B. schrieb:
> TextWriter tw = new StreamWriter(@"MeinLog.txt");
> (So landet das Log direkt neben der exe)

Nein, es landet dann im Working-Directory, was häufig identisch mit dem 
Programmverzeichnis ist, das kann aber zur Laufzeit z.B. durch 
OpenFileDialog geändert werden (oder auch schon beim Start abweichen)

Besser wäre den Pfad zusammenzubauen: Application.StartupPath + 
"MeinLog.txt"

Noch besser wäre einen geeigneten Ordner zu wählen:
http://blogs.msdn.com/b/patricka/archive/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-os-versions.aspx
(an die Pfade kommt man via Environment.GetSpecialFolder())

von Borislav B. (boris_b)


Lesenswert?

g. c. schrieb:
> Das wird dann nicht mehr funktionieren, wenn jemand dein Tool ins
> Windows Programme-Verzeichnis verschiebt.

Da gehört ein Programm ja auch nicht hin ;-)
In meinem Fall soll das Programm übrigens portabel auf einem USB-Stick 
liegen, von dort aus gestartet werden und auch dort sein Log ablegen.

Εrnst B✶ schrieb:
> Genau das macht man unter unix nicht.
> Logfiles gehören nach "/var/log/<programmname>.log" für systemweite
> Programme, oder eben ins User-Homeverzeichnis (des Users, der das
> Program ausführt!), bzw ein Unterverzeichnis davon.

Das Programm soll aber Platform unabhängig sein. D.h. ich möchte es 
direkt vom USB Stick auf dem Mac, Linux und Windows starten können.

bluppdidupp schrieb:
> Nein, es landet dann im Working-Directory, was häufig identisch mit dem
> Programmverzeichnis ist, das kann aber zur Laufzeit z.B. durch
> OpenFileDialog geändert werden (oder auch schon beim Start abweichen)

So ist es. In meinem Fall passt das aber, da sich das Working Directory 
nicht ändert.

von Reinhard Kern (Gast)


Lesenswert?

Εrnst B✶ schrieb:
>> (So landet das Log direkt neben der exe)
>
> Genau das macht man unter unix nicht.

Aber tausende von Unix-Freaks erklären einem, dass das, was so unter 
Windows nicht mehr geht, gerade der grosse Vorteil von Unix/Linux wäre 
(alles in einem Verzeichnis).

Εrnst B✶ schrieb:
> Logfiles gehören nach "/var/log/<programmname>.log"

Pfui Teufel das ist ja fast wie Windows.

Gruss Reinhard

von Amateur (Gast)


Lesenswert?

Wenn sichergestellt ist, dass das Programm immer unter einem 
freigegebenen Pfad herumhängt: Probiere es mal mit argv wenn Du dem 
Punkt-Verzeichnis nicht traust. Ist ja auch ein wenig zweideutig.
Bei Verwendung eines USB-Sticks hast Du ja das Problem, dass bei jedem 
Rechner ein anderes Laufwerk zugewiesen wird.
Ordentlich, unter Windoof, installiert (unter Programme), wiederum geht 
das dann in die Hose.

von wendelsberg (Gast)


Lesenswert?

Reinhard Kern schrieb:
>> Logfiles gehören nach "/var/log/<programmname>.log"
>
> Pfui Teufel das ist ja fast wie Windows.

Nein, da fehlt der 2te Teil des Satzes:

Εrnst B✶ schrieb:
> für systemweite
> Programme, oder eben ins User-Homeverzeichnis (des Users, der das
> Program ausführt!), bzw ein Unterverzeichnis davon.

Und damit ist es eben nicht so wie ...

wendelsberg

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Reinhard Kern schrieb:
> Εrnst B✶ schrieb:
>>> (So landet das Log direkt neben der exe)
>>
>> Genau das macht man unter unix nicht.
>
> Aber tausende von Unix-Freaks erklären einem, dass das, was so unter
> Windows nicht mehr geht, gerade der grosse Vorteil von Unix/Linux wäre
> (alles in einem Verzeichnis).

Dann sind das vielleicht Freaks, aber Ahnung von Unix haben sie nicht.

Unter Unix werden die Bereiche der ausführbaren Programme (meist unter 
/usr/bin), die Konfigurationsdateien (unter /etc) und eben auch die 
Log-Dateien (unter /var/log) üblicherweise strikt getrennt.

Ich möchte eher nicht, dass in den Verzeichnissen, in denen Binaries 
liegen, wild herumgeschrieben werden darf. Diese sollten schon aus 
Sicherheitsgründen nur-lesbar und ausführbar zu sein.

Aber es gibt andere, die bevorzugen alles in einem Verzeichnis.

Beides hat Vor- und Nachteile.

> Εrnst B✶ schrieb:
>> Logfiles gehören nach "/var/log/<programmname>.log"
>
> Pfui Teufel das ist ja fast wie Windows.

Das gab unter Unix es schon lange, bevor sich Bill überhaupt über den 
Namen seiner DLL-Sammlung Gedanken machte ;-)

von (prx) A. K. (prx)


Lesenswert?

Komisch, das bisher niemand einen sowohl in Linux als auch in Windows 
recht beliebten und sehr nützlichen Weg erwähnte, Logs zu schreiben: Die 
Einträge nicht direkt in ein eigenes File zu schreiben, sondern dem 
vorhandenen Logdienst zu übergeben.

Damit löst sich die Frage nach Pfaden in Luft auf und es hat in Linux 
auch den Vorteil, dass der Admin der Büchse steuern kann, wo das 
letztlich wirklich landet, die Logs live automatisiert auswerten und 
auch über Netz anderswo deponieren kann.

: Bearbeitet durch User
von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

A. K. schrieb:
> Komisch, das bisher niemand einen sowohl in Linux als auch in Windows
> recht beliebten und sehr nützlichen Weg erwähnte, Logs zu schreiben: Die
> Einträge nicht direkt in ein eigenes File zu schreiben, sondern dem
> vorhandenen Logdienst zu übergeben.

Oh, stimmt. Das hatte ich als bekannt vorausgesetzt - war wohl mal 
wieder zu weit voraus :-/

Solche Dinge übergibt man in der Tat den guten Geistern des Hauses 
(Dämonen) :-)

> Damit löst sich die Frage nach Pfaden in Luft auf und es hat in Linux
> auch den Vorteil, dass der Admin der Büchse steuern kann, wo das
> letztlich wirklich landet, die Logs live automatisiert auswerten und
> auch über Netz anderswo deponieren kann.

So isses.

von rere (Gast)


Lesenswert?


von Konrad S. (maybee)


Lesenswert?


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.