Función CHDR en lenguaje C

Función CHDR en lenguaje C
La configuración de un directorio de trabajo que comienza desde el directorio raíz de Linux abre la posibilidad de acceder y trabajar en toda la estructura del archivo en las diversas carpetas de sistema y usuario.

En esto Pista de Linux Artículo, aprenderá cómo configurar un directorio de trabajo utilizando el chdir () función.

Explicaremos el funcionamiento teórico de esta función, su sintaxis, los tipos de argumentos de entrada y salida, y el tipo de datos que toma cada uno de estos argumentos. Entonces, veremos una descripción de cómo el chdir () funciona y los encabezados requeridos para usar esta función.

Para usar esta función en la práctica, aplicaremos todo lo que aprendimos en un ejemplo práctico en el que aprende el proceso paso a paso sobre cómo usar esta función para establecer un directorio de trabajo.

Sintaxis de la función chdir () en lenguaje C

int chdir (const char* ruta)

Descripción de la función Chdir () en el lenguaje C

La función chdir () establece el directorio de trabajo en la carpeta especificada en la ruta absoluta que se pasa en la cadena de argumento de entrada. Esta función acepta una cadena pura o un puntero de tipo de char a una cadena que contiene la ruta del directorio seleccionado. Para llevar el directorio actual al nivel UP, necesitamos enviar la cadena "..." como un argumento de entrada a chdir (). Para consultar la ruta, use la función getCwd ().

El argumento de salida de esta función es de tipo int ty. Si la selección de directorio de trabajo es exitosa, Chdir () devuelve 0 como resultado. De lo contrario, si se produce un error, el resultado es -1.

Cuando trabajamos con esta función, lo hacemos directamente en la estructura de archivos del sistema operativo. Esta estructura puede variar en diferentes versiones de OS y puede apuntar a directorios que no existen o tienen un nombre diferente. Por lo tanto, el uso de esta función puede activar los diferentes tipos de errores.

La función chdir () devuelve -1 si se produce un error durante la ejecución. Sin embargo, esta información no es suficiente para identificar el error y proporcionar una solución en tiempo real o un mensaje al usuario, informando sobre la excepción. Sin embargo, todos los errores posibles que esta función puede lanzar se predefinen en el "Errno.encabezado. Veremos más tarde una sección especial para identificar los errores predefinidos.

La función chdir () se define en el "unistd.encabezado. Para usarlo, necesitamos incluirlo en nuestro ".Archivo C "de la siguiente manera:

#incluir

Cómo establecer el directorio de trabajo utilizando la función chdir () en el lenguaje C

En este ejemplo, explicamos cómo establecer el directorio de trabajo de nuestro código C. El primer paso es incluir el encabezado necesario, el "unistd.H ". También incluimos el encabezado de entrada y salida que es el "stdio.h "ya que usamos la función printf () para mostrar los resultados. Hay dos formas de establecer el directorio con esta función. El primer directorio es una cadena simple que enviamos como un argumento de entrada a chdir ().

Usamos la función getCwd () para recuperar el directorio creado. La cadena devuelta se almacena en el prostituta matriz de caracteres que imprimimos () al shell para determinar si se cambia correctamente.

En el siguiente fragmento, establecemos la carpeta "Documentos" como el directorio de trabajo utilizando este modo:

#incluir
#incluir
vacío principal ()

char dir [50];
chdir ("/home/linuxhint/documents/");
printf ("\ n \ n El directorio seleccionado es: %s \ n", getcwd (dir, 50));

A continuación, vemos una imagen con la compilación y ejecución de este código:

La segunda forma es crear un búfer con los elementos del tipo de char con la ruta del directorio seleccionado y llamar a la función chdir () pasando ese puntero de cadena como argumento de entrada.

#incluir
#incluir
vacío principal ()

char dir [50];
ruta char [50] = "/home/linuxhint/documents/";
chdir (ruta);
printf ("\ n \ n El directorio seleccionado es: %s \ n", getcwd (dir, 50));

A continuación, vemos una imagen con la compilación y ejecución de este código:

Posibles problemas y soluciones al usar la función chdir () en el idioma C

Uno de los problemas más comunes cuando se usa la función chdir () es que esta función usa la ruta absoluta del directorio que queremos seleccionar en su argumento de entrada.

Cuando trabajamos con archivos y rutas en programación, generalmente lo hacemos con funciones como fopen () o similares. Las rutas que se especifican como argumentos de entrada en estas funciones no tienen que contener el directorio raíz ya que toman la "casa" del usuario iniciado como su punto de partida.

A diferencia de estas funciones, Chdir () es una función del sistema. Esto significa que usa las rutas absolutas. Si el directorio de inicio de Linux (/) no se especifica como el inicio de la ruta, esta función no entra en vigencia. Aquí está el procedimiento correcto para seleccionar el directorio "Documentos" en una ruta absoluta:

Inicio/documentos incorrectos
/Inicio/Documentos Correcto

El siguiente código realiza la selección del directorio "Documentos" con dos llamadas a Chdir (). El primer código es sin el directorio raíz (/) y el segundo código es con el directorio raíz (/). Después de cada llamada, consulta el directorio actual con getCWD () y lo muestra en la consola de comando.

#incluir
#incluir
vacío principal ()

char name_ptr [100];
// sin directorio raíz
chdir ("home/linuxhint/documents/");
printf ("Sin directorio raíz: %s", getcwd (name_ptr, 100));
// con directorio raíz
chdir ("/home/linuxhint/documents/");
printf ("con directorio raíz: %s \ n", getcwd (name_ptr, 100));

Es muy importante tener esto en cuenta al compartir con diferentes funciones, cadenas o fragmentos que contienen las rutas o directorios del archivo, ya que, como podemos ver, algunas funciones surtan efecto cuando el directorio raíz no está incluido como fopen () mientras Otros como Chdir () no.

En la siguiente imagen, vemos el código anterior que se compila y ejecuta y muestra el efecto de esta función con y sin el directorio raíz en su ruta de entrada.

Cómo recuperar e identificar las excepciones que se pueden generar usando chdir () con la ayuda de las variables ERRNO y los errores predeterminados en el ERRNO.H encabezado

Esta sección explica brevemente cómo identificar los posibles errores generados utilizando la función chdir () a través de los mensajes de error predefinidos en el errno.h encabezado.

El "errno.El encabezado H ”define los códigos de error y se usa para identificarlos cuando se ejecuta un programa. Una variable de tipo entero llamado "errno" se define en él que almacena un valor predefinido que representa un error específico cada vez que ocurre una excepción durante la ejecución. A continuación, puede ver un fragmento original del "Errno-Base.H "encabezado que se incluye en el" Errno.h ”y en el que se definen los errores más comunes:

#define EPERM 1 / * Operación no permitida * /
#define Noent 2 / * no hay dicho archivo o directorio * /
#define esrch 3 / * no tal proceso * /
#Define Eintr 4 / * Call Sistema interrumpido * /
#Define EIO 5/ * Error de I/O */
#define enxio 6 / * no hay dicho dispositivo o dirección * /
#Define E2Big 7 / * Lista de argumentos demasiado larga * /
#define enoExec 8 / * EXEC FORMAT ERROR * /
#define ebadf 9 / * número de archivo malo * /
#define Echild 10 / * No hay procesos para niños * /
#define Eagain 11 / * intente de nuevo * /
#define enomem 12 / * fuera de memoria * /
#define Eacces 13 / * Permiso denegado * /
#Define Efault 14 / * Mala dirección * /
#define enotblk 15 / * dispositivo de bloque requerido * /
#Define Ebusy 16 / * dispositivo o recurso ocupado * /
#define eexist 17 / * El archivo existe * /
#define exdev 18 / * enlace de servicio cruzado * /
#define ENODEV 19 / * no es tal dispositivo * /
#define enotdir 20 / * no es un directorio * /
#define eisdir 21 / * es un directorio * /
#define Einval 22 / * argumento no válido * /
#define Enfile 23 / * El desbordamiento de la tabla de archivo * /
#define Emfile 24 / * demasiados archivos abiertos * /
#define enotty 25 / * no es una máquina de escribir * /
#define Etxtbsy 26 / * archivo de texto ocupado * /
#define Efbig 27 / * archivo demasiado grande * /
#Define ENOSPC 28 / * No queda espacio en el dispositivo * /
#define espipe 29 / * busque ilegal * /
#Define EROFS 30 / * Sistema de archivos de solo lectura * /
#define Emlink 31 / * demasiados enlaces * /
#define Epipe 32 / * tubería rota * /
#define edom 33 / * Math Argumento fuera del dominio de func * /
#define Erange 34 / * resultado matemático no representable * /

En los casos en que la función chdir () regresa -1, podemos identificar el error utilizando la variable "errno". De esta manera, damos un tratamiento específico para resolver el error o un mensaje al usuario.

Las variables y los códigos de error se definen en el "Errno.encabezado. Para usarlos, debemos incluirlos en nuestro ".Archivo C "de la siguiente manera:

#incluir

Ejemplo:

En este ejemplo, intentaremos establecer el directorio de trabajo en una carpeta inexistente. Entonces, Chdir () devuelve -1. Como sabemos que la función genera un error, consultamos la variable "errno" en una condición IF para identificar el error. En este caso, es el NO ENT error que indica que el archivo o directorio no se encuentra y está representado por el número 2.

Usamos la función printf () para enviar un mensaje al usuario, informándoles que ha ocurrido un error, el número de error y su significado. El siguiente es el código para este ejemplo:

#incluir
#incluir
#incluir
vacío principal ()

en terror;
error = chdir ("/home/linuxhint/docnts/");
if (error == -1)
printf ("\ n \ nan se produjo un error. Error: %i \ n ", errno);
if (errno == enoent)
printf ("No hay dicho archivo o directorio \ n \ n");

Puede probar las diferentes frutas que indican las carpetas existentes y inexistentes para ver los resultados. La siguiente imagen muestra la compilación y ejecución de este código:

Conclusión

En este completo Pista de Linux Artículo, explicamos cómo usar la función chdir () para especificar un directorio de trabajo. Observamos una sección teórica sobre esta función y aplicamos lo que aprendimos en un ejemplo con fragmentos de código de imagen. También le mostramos algunos de los errores más comunes al usar el chdir () y cómo especificar la ruta de trabajo correctamente. Además, incluimos una sección especial que le enseña cómo detectar los diversos errores con la variable "errno".

Esperamos que este artículo sea útil para ti. Para obtener más artículos sobre el lenguaje C y los consejos de Linux, use el motor de búsqueda en nuestro sitio web.