GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir le chemin d'accès au fichier actuel (pwd) sous Linux à partir de C ?

Le simple fait d'ouvrir et de lire des répertoires ne modifie pas le répertoire de travail actuel. Cependant, changer de répertoire dans votre programme le fera.

pour référence,

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

Pour les systèmes POSIX, j'ai trouvé trois solutions :

Obtenir la valeur d'une variable d'environnement "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;
}

Résultat :

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

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

Résultat

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

Exécutez la commande système "pwd" et lisez la sortie

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

Résultat :

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

Vous pouvez utiliser chdir(2) pour changer le répertoire de C, puis system("pwd"); vous donnera quel que soit le répertoire que vous chdir 'ed à.

L'équivalent C du pwd -la commande est getcwd(3).


Linux
  1. Linux :comment obtenir tous les journaux de connexion du système ?

  2. Linux - Comment faire en sorte que Sar s'affiche pour la veille ?

  3. Comment puis-je obtenir la résolution (largeur et hauteur) d'un fichier vidéo à partir d'une ligne de commande Linux ?

  4. Comment obtenir le nombre de CPU sous Linux en utilisant C ?

  5. Comment obtenir le chemin complet d'un fichier ?

Comment obtenir la date et l'heure actuelles en Python

Comment obtenir la taille d'un répertoire sous Linux

Comment obtenir le nom de fichier à partir du chemin complet sous Linux

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Comment puis-je obtenir la longueur d'un fichier vidéo à partir de la console ?