GNU/Linux >> Znalost Linux >  >> Linux

Jak získat cestu k aktuálnímu souboru (pwd) v Linuxu z C?

Pouhé otevření a čtení adresářů nezmění aktuální pracovní adresář. Změna adresáře ve vašem programu však ano.

pro referenci,

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

Pro systémy POSIX jsem našel tři řešení:

Získejte hodnotu z proměnných prostředí "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;
}

Výsledek:

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

Použijte 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;
}

Výsledek

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

Spusťte systémový příkaz "pwd" a přečtěte si výstup

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

Výsledek:

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

Můžete použít chdir(2) ke změně adresáře z C a poté system("pwd"); vám poskytne jakýkoli adresář chdir 'ed to.

C-ekvivalent pwd -příkaz je getcwd(3).


Linux
  1. Linux:Jak získat všechny přihlašovací protokoly ze systému?

  2. Linux – jak přimět Sar, aby se ukazovala za předchozí den?

  3. Jak nastavit IP adresu z C v linuxu

  1. Jak vytvořit soubor v Linuxu z okna terminálu?

  2. jak získat relativní cestu aktuálního adresáře v tomcat z prostředí linux pomocí javy

  3. Jak získat název hostitele z IP (Linux)?

  1. Jak mohu získat rozlišení (šířku a výšku) pro video soubor z příkazového řádku linuxu?

  2. Jak získat počet CPU v Linuxu pomocí C?

  3. Jak získat fyzickou velikost souboru v Linuxu?