GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bekomme ich den Pfad zur aktuellen Datei (pwd) in Linux von C?

Durch einfaches Öffnen und Lesen von Verzeichnissen wird das aktuelle Arbeitsverzeichnis nicht geändert. Das Ändern des Verzeichnisses in Ihrem Programm wird jedoch.

als Referenz,

#include <unistd.h>
#include <stdio.h>

int main() {
    char cwd[1024];
    chdir("/path/to/change/directory/to");
    getcwd(cwd, sizeof(cwd));
    printf("Current working dir: %s\n", cwd);
}

Für POSIX-Systeme habe ich drei Lösungen gefunden:

Wert aus einer Umgebungsvariablen "PWD" abrufen

#include <stdio.h>
#include <stdlib.h>

#ifdef __unix__
    #define IS_POSIX 1
#else
    #define IS_POSIX 0
#endif


int main (int argv, char **argc)
{
    if (IS_POSIX == 1) {
        puts("Path info by use environment variable PWD:");
        printf("\tWorkdir: %s\n", getenv("PWD"));
        printf("\tFilepath: %s/%s\n", getenv("PWD"), __FILE__);
    }
    return 0;
}

Ergebnis:

Path info by use environment variable PWD:
    Workdir: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils
    Filepath: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils/main.c

Verwenden Sie getcwd()

#include <stdio.h>
#include <stdlib.h>

#ifdef __unix__
    #define IS_POSIX 1
    #include <unistd.h>
#else
    #define IS_POSIX 0
#endif


int main (int argv, char **argc)
{
    if (IS_POSIX == 1) {
        char cwd[1024];
        getcwd(cwd, sizeof(cwd));
        puts("Path info by use getcwd():");
        printf("\tWorkdir: %s\n", cwd);
        printf("\tFilepath: %s/%s\n", cwd, __FILE__);
    }
    return 0;
}

Ergebnis

Path info by use getcwd():
    Workdir: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils
    Filepath: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils/main.c

Systembefehl "pwd" ausführen und Ausgabe lesen

#ifdef __unix__
    #define IS_POSIX 1
    #define _BSD_SOURCE
#else
    #define IS_POSIX 0
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main (int argv, char **argc)
{
    if (IS_POSIX == 1) {
        char buffer[500];
        FILE *output;

        // read output of a command
        output = popen("/bin/pwd", "r");
        char *pwd = fgets(buffer, sizeof(buffer), output);

        // strip '\n' on ending of a line
        pwd = strtok(pwd, "\n");

        puts("Path info by execute shell command 'pwd':");
        printf("\tWorkdir: %s\n", pwd);
        printf("\tFilepath: %s/%s\n", pwd, __FILE__);
    }
    return 0;
}

Ergebnis:

Path info by execute shell command 'pwd':
    Workdir: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils
    Filepath: /media/setivolkylany/WorkDisk/Programming/Projects/c-utils/main.c

Sie können chdir(2) verwenden, um das Verzeichnis von C zu ändern, dann system("pwd"); gibt Ihnen jedes beliebige Verzeichnis chdir 'ed zu.

Das C-Äquivalent von pwd -Befehl ist getcwd(3).


Linux
  1. Wie kann ich die Auflösung (Breite und Höhe) für eine Videodatei von einer Linux-Befehlszeile abrufen?

  2. Wie erhalte ich die Anzahl der CPUs in Linux mit C?

  3. Wie erhalte ich den vollständigen Pfad einer Datei?

  4. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

  5. So erhalten Sie den relativen Pfad des aktuellen Verzeichnisses in Tomcat aus der Linux-Umgebung mit Java

So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit in Python

So erhalten Sie die Größe eines Verzeichnisses in Linux

So erhalten Sie den Dateinamen aus dem vollständigen Pfad in Linux

So entfernen Sie (^M) Zeichen aus einer Datei in Linux

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

Wie kann ich die Länge einer Videodatei von der Konsole abrufen?