GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener la ruta al archivo actual (pwd) en Linux desde C?

Simplemente abrir y leer directorios no cambia el directorio de trabajo actual. Sin embargo, cambiar el directorio en su programa sí lo hará.

como referencia,

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

Para los sistemas POSIX encontré tres soluciones:

Obtener valor de una variable de entorno "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;
}

Resultado:

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

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

Resultado

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

Ejecute el comando del sistema "pwd" y lea el resultado

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

Resultado:

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

Puede usar chdir(2) para cambiar el directorio de C, luego system("pwd"); le dará cualquier directorio que chdir 'ed a.

El equivalente C del pwd -el comando es getcwd(3).


Linux
  1. Linux:¿Cómo obtener todos los registros de inicio de sesión del sistema?

  2. Linux:¿cómo hacer que Sar se muestre para el día anterior?

  3. ¿Cómo obtener la ruta completa de un archivo?

  4. Cómo agregar el archivo .so a java.library.path en Linux

  5. ¿Cómo obtener el nombre de host de IP (Linux)?

Cómo obtener la fecha y hora actuales en Python

Cómo obtener el tamaño de un directorio en Linux

Cómo obtener el nombre de archivo de la ruta completa en Linux

Cómo quitar (^M) caracteres de un archivo en Linux

¿Cómo copiar un archivo de otro directorio al actual?

¿Cómo puedo obtener la duración de un archivo de video desde la consola?