PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Files: Windows -> Linux :-(



Miles
04-06-2003, 20:56
Ich hab das Thema schon mal in einem anderen Thread so ähnlich geschrieben. Aber es ist doch etwas anders.

Also:
Wenn ich in Windows ein C++-Programm in C++ geschrieben hab und dann mit einem ofstream (einfach eine Klasse, um in Dateien zu schreiben, wers nicht weiß ;-)) ein File geschrieben hab, dann hat das in etwa so ausgesehen:


#include<fstream.h>

int main(int i,char *cpa[])
{ ofstream oFile("Test.txt");

oFile<<"This is a test.\n";
oFile.close();
}


Wenn das Programm dann gestartet wurde, ist nachher im gleichen Verzeichnis wie wie Exec. auch die von mir erstellte Datei gewesen. Das gleiche gilt auch für Files, aus denen ich lesen will. Soweit, sogut.

Unter Linux ist das aber ganz anders. Und ich finde das viel schlechter. Aber vielleicht kann man mich ja aufklären. :D

Also: Wenn ich EXAKT den gleichen Quellcode in Linux starte, dann habe ich nachher das File "Test.txt" nicht im gleichen Directory wie meine Exec, sondern (da ich Root bin) IMMER im /root-Directory.

Das ist doch echt Mist, oder? Ich meine, ich kann nicht alle Files von allen Programmen im /root-Diredory haben bzw. will ich das nicht. Aber auf der anderen Seite will ich meine Programme aber nicht mit einem fixen Directory schreiben.
Das Problem ergibt sich ja schon, wenn ich das Programm statt im /root im /root/etwas_anderes hab.

Ich hoffe ihr wisst was ich meine.
Wie kann ich es in Linux zu stande bringen, dass meine externen Files IMMER IM GLEICHEN DIRECTORY geöffnet/geschrieben werden, so wie unter Windows?

UdoJ
05-06-2003, 07:11
Hallo,
wenn du dich ein wenig daran gewöhnt hast das Linux es genauer nimmt das du nur an den für dein angemeldeten User schreiben kannst,dann wirst du merken wie sicher dein System vor "Dummheiten" solcher Art werden.
Jedes Verzeichnis unter Linux hat seine bestimmt aufgabe und selbst deine Ausführbaren bin Dateien sollten nur dort stehen wo das System danach sucht (eben in /bin oder /usr/bin) wenn du angemeldet bist und nicht in irgend ein x belibiegen Verzeichniss.
Dein System ist ein Multiusersystem,wenn du dein Programm aber da schreiben lassen willst wo es keine Rechte für hat,dann gibt es Probleme.
Stell dir vor du logst dich als User ein(was du eigentlich tun solltest) dann darf dein Programm nur dort schreiben wo dein User seine Rechte besitzt und das ist für den User sein Homeverzeichniss. Als Root kann dein Programm überall hinschreiben aber es nimmt das verzeichniss des "Benutzers" Root und das ist nunmal das Verzeichniss root.Wo das jeweilige Verzeichniss in des Angemeldeten User ist steht in Systemvariablem die beim Anlegen des User gesetzt werden.
Wenn dein Programm gerade da schreibt wo du mal eben dein Programm stehen hast,dann kann dein System sehr schnell zerstört werden.
Gewöhn dich an der Verzeichnisstruktur von Linux und freu dich daran das es logisch ist so zu verfahren wenn man ein sicheres System haben will.
Gruß Udo

elrond
05-06-2003, 07:34
@miles
bist du dir sicher, dass das auch unter win nicht nur funktioniert, wenn du dich beim start der exe im verzeichnis der exe befindest ?

versuch doch mal folgendes:
1. md c:\exe
2. exe ins verz c:\exe
3. md c:\test
4. cd c:\test
5. c:\exe\<programm>.exe

in diesem Fall solte die entstehende Datei im verzeichnis c:\test landen. Alles andere würde mich wundern...

anda_skoa
05-06-2003, 11:14
Original geschrieben von Miles

Unter Linux ist das aber ganz anders. Und ich finde das viel schlechter. Aber vielleicht kann man mich ja aufklären. :D


Wie elrond schon angedeutet hat, ist das extakt das selbe Verhalten wie unter Windows.
Wenn eine Datei ohne Pfadangabe geöffnet wird, ist der Pfad implizit immer das aktuelle Arbeitsverzeichnis des Prozesses.
Unter Windows genau so wie unter Linux.



Ich hoffe ihr wisst was ich meine.
Wie kann ich es in Linux zu stande bringen, dass meine externen Files IMMER IM GLEICHEN DIRECTORY geöffnet/geschrieben werden, so wie unter Windows?

Genau wie unter Windows muss man dazu den Dateinamen mit Pfad angeben.

Ciao,
_