Obtener el directorio de trabajo actual en C
-
Usa la función
getcwd
para obtener el directorio de trabajo actual -
Verificar correctamente el valor devuelto por la función
getcwd
para obtener el directorio de trabajo actual en C -
Utilice la función
get_current_dir_name
para obtener el directorio de trabajo actual
Este artículo explicará varios métodos para obtener el directorio de trabajo actual en C.
Usa la función getcwd
para obtener el directorio de trabajo actual
La función getcwd
es una llamada al sistema compatible con POSIX que puede recuperar el directorio de trabajo actual del programa que llama. La función getcwd
toma dos argumentos - el buffer char*
donde se almacena el nombre de la ruta y el número de bytes asignados en el buffer dado. La función almacena el nombre del directorio de trabajo actual como una cadena terminada en cero y el usuario es responsable de garantizar que la dirección char*
tiene suficiente espacio para el nombre de la ruta. Tenga en cuenta que getcwd
devuelve el nombre absoluto del directorio.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifndef MAX_BUF
#define MAX_BUF 200
#endif
int main(void) {
char path[MAX_BUF];
getcwd(path, MAX_BUF);
printf("Current working directory: %s\n", path);
exit(EXIT_SUCCESS);
}
Verificar correctamente el valor devuelto por la función getcwd
para obtener el directorio de trabajo actual en C
La función getcwd
puede fallar al recuperar el valor correcto; por lo tanto, en tales casos, devuelve NULL
y establece errno
con los códigos de error correspondientes. El usuario es responsable de implementar el código de comprobación de errores y de modificar el flujo de control del programa según sea necesario para un escenario determinado. Tenga en cuenta que ponemos errno
explícitamente a cero antes de la llamada a la función getcwd
ya que es una buena práctica hacerlo antes de llamar a las funciones de la biblioteca que prometen poner errno
. El valor de errno
se pone a cero si el argumento tamaño es menor que el nombre de la ruta del directorio de trabajo.
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifndef MAX_BUF
#define MAX_BUF 200
#endif
int main(void) {
char path[MAX_BUF];
errno = 0;
if (getcwd(path, MAX_BUF) == NULL) {
if (errno == ERANGE)
printf("[ERROR] pathname length exceeds the buffer size\n");
else
perror("getcwd");
exit(EXIT_FAILURE);
}
printf("Current working directory: %s\n", path);
exit(EXIT_SUCCESS);
}
Alternativamente, podemos pasar el valor NULL
como primer argumento a la función getcwd
y 0
como segundo argumento. La propia función asignará un buffer suficientemente grande de forma dinámica utilizando malloc
y devolverá el puntero char
a la ubicación. Ten en cuenta que el usuario debe llamar a la función free
sobre el puntero devuelto para desasignar la memoria del buffer.
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifndef MAX_BUF
#define MAX_BUF 200
#endif
int main(void) {
char path[MAX_BUF];
errno = 0;
char *buf = getcwd(NULL, 0);
if (buf == NULL) {
perror("getcwd");
exit(EXIT_FAILURE);
}
printf("Current working directory: %s\n", buf);
free(buf);
exit(EXIT_SUCCESS);
}
Utilice la función get_current_dir_name
para obtener el directorio de trabajo actual
La función get_current_dir_name
es otra función que puede recuperar el directorio de trabajo actual. Tenga en cuenta que esta función requiere que la macro _GNU_SOURCE
esté definida; de lo contrario, el código probablemente arrojará un error de compilación. La función get_current_dir_name
no toma argumentos y devuelve un puntero char
similar a la función getcwd
. La memoria se asigna automáticamente usando malloc
, y el código que llama es responsable de liberar el puntero devuelto.
#define _GNU_SOURCE
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifndef MAX_BUF
#define MAX_BUF 200
#endif
int main(void) {
char path[MAX_BUF];
errno = 0;
char *buf = get_current_dir_name();
if (buf == NULL) {
perror("get_current_dir_name");
exit(EXIT_FAILURE);
}
printf("Current working directory: %s\n", buf);
free(buf);
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook