Frage

Ich schreibe ein C-Programm unter Linux.Befehle wie execv() erfordern einen Pfad in Form eines C-Strings.Gibt es einen Befehl, der den aktuellen Pfad in Form einer Zeichenfolge im C-Stil zurückgibt?

War es hilfreich?

Lösung

getcwd():

ZUSAMMENFASSUNG

#include <unistd.h>

char *getcwd(char *buf, size_t size);

BESCHREIBUNG

Der getcwd() Die Funktion muss einen absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses in das Array einfügen, auf das verwiesen wird buf und buf zurückgeben.Der in das Array kopierte Pfadname darf keine Komponenten enthalten, die symbolische Links sind.Der Größe Das Argument ist die Größe des Zeichenarrays in Bytes, auf das das Argument zeigt buf Streit.Wenn buf ein Nullzeiger ist, ist das Verhalten von getcwd() nicht spezifiziert.

RÜCKGABEWERT

Nach erfolgreichem Abschluss, getcwd() soll das zurückgeben buf Streit.Ansonsten, getcwd() soll einen Nullzeiger zurückgeben und setzen Fehlernr um den Fehler anzuzeigen.Der Inhalt des Arrays, auf das verwiesen wird buf sind dann undefiniert....

Andere Tipps

Der Weg Das Argument von execv() ist der Pfad zu der Anwendung, die Sie ausführen möchten, nicht das aktuelle Arbeitsverzeichnis (das von getcwd() zurückgegeben wird) oder der Shell-Suchpfad (der von getenv("PATH") zurückgegeben wird).

Je nachdem, was Sie tun, können Sie möglicherweise mehr Nutzen aus der system()-Funktion in der C-Bibliothek ziehen als aus der untergeordneten exec()-Familie.

Das ist nicht ANSI C:

#include <unistd.h>

char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);

Wenn der Pfad ein relativer Weg sein kann, sollten Sie in der Lage sein, '' zu verwenden. ' oder './' als Weg.Ich bin mir nicht sicher, ob es funktionieren wird, aber Sie könnten es versuchen.

Ich bin kein professioneller Programmierer, daher ist dies keine genaue Antwort.

Sie müssen lediglich die Umgebungsvariable PWD (aktuelles Arbeitsverzeichnis) abrufen.

Ich bin mir nicht sicher, in welcher Bibliothek es sich befindet, aber es ist ein Standard-Linux-Header.

Ich werde mich umschauen und sehen, ob ich es finden kann.

bearbeiten:

Ich dachte an ,getenv() Dies wäre hilfreich, wenn Sie auch Systembefehle ausführen müssen und die verschiedenen Bin-Pfade in PATH benötigen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top