GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere il percorso del file corrente (pwd) in Linux da C?

La semplice apertura e lettura delle directory non modifica la directory di lavoro corrente. Tuttavia, la modifica della directory nel tuo programma lo farà.

per riferimento,

#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);
}

Per i sistemi POSIX ho trovato tre soluzioni:

Ottieni valore da una variabile di ambiente "PWD"

#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;
}

Risultato:

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

Usa 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;
}

Risultato

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

Esegui il comando di sistema "pwd" e leggi l'output

#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;
}

Risultato:

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

Puoi usare chdir(2) per cambiare dir da C, quindi system("pwd"); ti darà qualunque directory tu chdir 'ed a.

L'equivalente in C del pwd -il comando è getcwd(3).


Linux
  1. Linux:come ottenere Sar da mostrare per il giorno precedente?

  2. Come ottenere il percorso completo di un file?

  3. Come impostare l'indirizzo IP da C in Linux

  4. Come creare un file in Linux dalla finestra del terminale?

  5. come ottenere il percorso relativo della directory corrente in Tomcat dall'ambiente Linux usando java

Come ottenere la data e l'ora correnti in Python

Come ottenere la dimensione di una directory in Linux

Come ottenere il nome del file dal percorso completo in Linux

Come rimuovere (^M) caratteri da un file in Linux

Come copiare un file da un'altra directory a quella corrente?

Come posso ottenere la lunghezza di un file video dalla console?