Pfadangabe bei Programmausführung WOHER?

  • hi leute,

    standardmässig ist es bei der Programmausführung so, dass Pfadangaben von Dateien weggelassen werden können, solange sich die Datei im selben Ordner wie das Programm befindet.

    FRAGE:
    woher weiß mein Programm in welchem Ordner es sich befindet, und somit den Pfad der Datei die sich ebenfalls in diesem Ordner befindet.
    WOHER kommt diese Information? Vom Betriebssystem? Wie läuft das?

    Danke jetzt schon für Euro Infos!
    Scrapper

  • woher weiß mein Programm in welchem Ordner es sich befindet, und somit den Pfad der Datei die sich ebenfalls in diesem Ordner befindet.


    Üblicherweise braucht sich das Programm nicht darum kümmern: Der Dateiname wird im Endeffekt an eine Betriebsystemroutine übergeben, und das Betriebssystem löst solche Sachen dann auf.

    Programme können üblicherweise aber auch fragen, was denn ihre working directory ist, bzw. sie auch ändern. Läuft auch übers Betriebssystem.

    *plantsch*

  • Danke für Eure Infos.

    Nun hab ichs: Natürlich könnte es so sein, und das halte ich für sehr wahrscheinlich, dass es wie in folgendem kleinen Beispiel abläuft.

    BSP) in einem C Programm wird mittels der Funktion !-- @page { size: 8.5in 11in; margin: 0.79in } P { margin-bottom: 0.08in } -->FILE *datei = fopen(“textdatei.txt”, “r”);
    Diese Funktion fopen könnte unter Linux beispielsweise das Kommando "pwd" (print working directory) ausführen und schon ist der ganze Pfad bekannt.
    Sehr wahrscheinlich, dass dies so gelöst ist. Könnte jedoch von Betriebssystem zu Betriebssystem andere Varianten geben.


  • Diese Funktion fopen könnte unter Linux beispielsweise das Kommando "pwd" (print working directory) ausführen und schon ist der ganze Pfad bekannt.
    Sehr wahrscheinlich, dass dies so gelöst ist. Könnte jedoch von Betriebssystem zu Betriebssystem andere Varianten geben.

    um wieder ein bisschen haarzuspalten: die funktion wird wohl eher eine andere library-funktion aufrufen, als extra einen prozess zu starten. da gäbe es zb getcwd(3). wie mir ein ltrace gezeigt hat, ist dies jedoch nicht der fall. fopen(3) verwendet den system call open(2), der das scheinbar selbst irgendwie hinzaubert. so, quellcode schauen darfst du selbst ;) die manual-sections stehen in der klammer, also zb "man 7 path_resolution" (was auch eine sehr interessante seite ist in diesem zusammenhang).

    lg

  • [...]Pfadangaben von Dateien weggelassen werden können, solange sich die Datei im selben Ordner wie das Programm befindet.

    Das ist nicht richtig. Das aktuelle Verzeichnis hat nichts mit dem Ort, wo sich das Programm selber befindet, zu tun. Wenn du beispielsweise in Linux folgende Situation hast:

    ~$ ls

    dann befindet sich ls in /bin/, aber das aktuelle Verzeichnis ist ~!

    Unter Windows ist es so, dass wenn Programme via Explorer aufgerufen werden, das aktuelle Verzeichnis standardmäßig das Verzeichnis ist, in dem die exe-Datei liegt (kann aber auch umgestellt werden via Eigenschaftsfenster eines Links).
    Unter Mac OS X ist das aktuelle Verzeichnis immer / wenn ein Programm vom Finder aus gestartet wird, was oft zu Verwirrungen führt bei Neulingen.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Mit der Funktion getcwd() lässt sich der Name des Arbeitsverzeichnisses ermitteln.

    #include <unistd.h>

    char *getcwd(char *puffer, int puffergrösse)

    Fkt. gibt bei Erfolg den Pfadnamen an puffer zurück, bei Scheitern NULL

    greetings
    scrapper

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!