Función Write() en lenguaje C

Funcion Write En Lenguaje C



La gestión de archivos en programación es una tarea que el programador debe dominar. El conocimiento de las distintas funciones de abrir, leer y escribir es fundamental porque siempre las necesitamos para almacenar o disponer de la información que se almacena en los archivos.

En este artículo de Linux Hint, aprenderá a usar la función write() para escribir los archivos.







Explicaremos todo sobre esta ella, su sintaxis, el método de llamada, los argumentos de entrada y salida, el tipo de datos que acepta en cada caso y cómo declararlos correctamente.



Luego, aplicamos lo que aprendimos poniendo el uso de esta función en ejemplos prácticos que preparamos para usted con fragmentos de código e imágenes, mostrando el uso de write() en el lenguaje C.



Para que tenga un conocimiento completo del uso de la función write(), agregamos una sección especial que describe los errores individuales que pueden ocurrir al usar esta función, así como su detección e identificación, para que tenga la técnicas necesarias para una pronta solución en caso de su ocurrencia.





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

En t escribir ( En t f.d. , vacío * buf , talla_t norte ) ;

Descripción de la función Write() en lenguaje C

La función write() escribe en un archivo abierto. Esta función escribe el contenido del búfer al que apunta 'buf' en el archivo especificado por su descriptor en el argumento de entrada 'fd'. El tamaño del bloque que se escribirá en el archivo debe especificarse en el argumento de entrada 'n'.

Para poder escribir con la función write(), el archivo debe abrirse con la función open() y especificarse en los atributos O_RDONLY u O_RDWR. De lo contrario, esta función no tiene efecto.



Si la llamada es exitosa, devuelve la cantidad de caracteres ingresados. Si ocurre un error al escribir, devuelve un resultado que es igual a -1. El código de identificación que indica el error se puede recuperar de la variable global errno que se define en el encabezado 'errno.h'.

Más adelante, encontrarás un apartado donde te explicamos cómo detectar e identificar los errores más comunes de esta función.

La función write() se define en el encabezado 'unistd.h'. Las banderas que definen los atributos y el modo para abrir el archivo se definen en 'fcntl.h'. Para usar las funciones open() y write(), debe incluir estos encabezados en su código de la siguiente manera:

#include

#incluye

Cómo escribir en un archivo usando la función Write() en lenguaje C

En este ejemplo, escribimos un archivo de texto vacío llamado 'ejemplo.txt' que creamos anteriormente en el directorio 'Documentos'.

El primer paso es insertar los encabezados necesarios. Dentro de la función main(), abra el archivo con la función open(). Para hacer esto, necesitamos declarar el entero 'fd' que sirve como descriptor de archivo, y la matriz de búfer 'buf' de 1024 caracteres que contiene el texto que queremos escribir en el archivo. En este búfer, almacenamos el primer párrafo de la página de manual de GCC para escribirlo en el archivo 'example.txt'.

Después de abrir el archivo con la función open() en modo lectura/escritura, escribimos en el archivo llamando a la función write() y pasando el descriptor de archivo 'fd' como primer argumento de entrada, el puntero 'buf' como segundo argumento, y el tamaño de la cadena que está contenida en la matriz como tercer argumento, que obtenemos con la función strlen(). Aquí está el código para este ejemplo:

#incluir

#incluir

#include

#include

#incluir

#incluye

#incluir

vacío principal ( )

{

En t f.d. ;

carbonizarse buffer [ 1024 ] = 'Cuando invoca GCC, normalmente realiza preprocesamiento, compilación, ensamblaje y enlace. Las opciones generales le permiten detener este proceso en una etapa intermedia. Por ejemplo, la opción -c dice que no ejecute el enlazador. Luego, la salida consiste en archivos de objetos generados por el ensamblador'. ;

f.d. = abierto ( 'Documentos/ejemplo.txt' , O_RDWR ) ;

escribir ( f.d. , & buffer , estrellándose ( buffer ) ) ;

cerca ( f.d. ) ;

}

En la siguiente figura vemos la compilación y ejecución de este código junto con el archivo abierto que es escrito por la función write():

Cómo agregar un texto al final de un archivo con la función Write() en lenguaje C

Cuando se abre un archivo especificando los indicadores O_WRONLY o O_RDWR, el cursor salta a la primera posición y comienza a escribir desde allí.

Para agregar un texto al final de un archivo, debe especificarse mediante una operación lógica OR entre los indicadores O_WRONLY o O_RDWR y el indicador O_ APPEND en el argumento de indicadores de entrada de la función open() cuando se abre el archivo. De esta forma, el cursor se coloca al final del archivo y desde allí comienza la escritura. Además, los atributos y el modo de escritura se pueden cambiar una vez que se abre el archivo con la función fcntl().

En la siguiente ilustración, puedes ver un código que agrega un texto al final del archivo que escribimos en el ejemplo anterior:

#incluir

#incluir

#include

#include

#incluir

#incluye

#incluir

vacío principal ( )

{

En t f.d. ;

carbonizarse buffer [ 1024 ] = 'Este texto se agregó. Este texto se agregó'. ;

f.d. = abierto ( 'Documentos/ejemplo.txt' , O_RDWR | O_APPEND ) ;

escribir ( f.d. , & buffer , estrellándose ( buffer ) ) ;

cerca ( f.d. ) ;

}

La siguiente imagen muestra el texto agregado. Como puede ver, con este método de apertura, la función write() comienza a escribir en la posición del último carácter que se escribe en el archivo:

Cómo Detectar e Identificar los Errores que Pueden Ocurrir al Usar la Función Write() en el Lenguaje C

Usar write() puede generar varios errores. Cuando esto sucede, esta función devuelve un resultado que es igual a -1.

La forma más sencilla de determinar si se ha producido un error es utilizar una condición 'si' donde la condición es el valor de retorno de -1. Ahora, veamos cómo puede usar este método para determinar si se ha producido un error:

En t norte ;

norte = escribir ( f.d. , & buffer , estrellándose ( buffer ) ) ;

si ( norte == - 1 ) {

      imprimir ( 'Se produjo un error al intentar escribir el archivo'. ) ;

      }

Si la función write() regresa con un error, pasa a la declaración 'if' e imprime el mensaje, ' Ocurrió un error al intentar escribir el archivo “.

Cuando ocurre un error, se almacena automáticamente un código numérico en la variable global errno que se define en el encabezado 'errno.h'. Este código se puede usar para identificar el error que ocurrió.

El siguiente es un extracto con los errores que puede generar la función write() y que están definidos en el encabezado “errno.h”, junto con una breve descripción de cada error y el valor entero asociado:

Definición Valor en número de error Error
OTRA VEZ 11 Intentar otra vez.
EBADF 9 Número de archivo incorrecto.
EDESTADDRREQ 89 Dirección de destino requerida.
EDCUOT 122 Cuota superada.
EFECTO 14 Direccion incorrecta.
EFBIG 27 Archivo demasiado grande.
EINTR 4 Llamada al sistema interrumpida.
SELECCIÓN ÚNICA 22 Argumento no válido.
OEI 5 Error de E/S.
ENOSPC 28 No queda espacio en el dispositivo.
Superior 1 Operacion no permitida.

La forma más fácil de identificar un error es abrir un interruptor donde la variable errno es la condición de salto y cada caso es una definición de error.

A continuación, veamos un ejemplo en el que intentamos ingresar un descriptor con un signo negativo, lo que resulta en un error. Para identificar un error, usamos la condición 'si' que vimos en el fragmento anterior. Para identificarlo, abrimos un interruptor con los tres errores más comunes que puede producir esta función.

#incluir

#include

#include

#incluir

#incluye

#incluir

#include

vacío principal ( )

{

En t f.d. ;

En t norte ;

carbonizarse buffer [ 1024 ] = 'Hola Mundo' ;

f.d. = abierto ( 'Documentos/ejemplo.txt' , O_RDWR ) ;

norte = escribir ( - 2 , & buffer , estrellándose ( buffer ) ) ;

si ( norte == - 1 ) {

    cambiar ( error ) {

          caso EBADF : {

                  imprimir ( 'Número de archivo incorrecto. Error: %i \norte ' , error ) ;

                  romper ; }

          caso SELECCIÓN ÚNICA : {

                    imprimir ( 'Argumento no válido. Error: %i \norte ' , error ) ;

                    romper ; }

          caso OEI : {

                imprimir ( 'Error de E/S. Error: %i \norte ' , error ) ;

                romper ; }

    }

  }

}

Como podemos ver en la siguiente figura, la función write() devuelve un error cuando se pasa un descriptor inválido como argumento de entrada. El valor que se recupera de la variable errno se usa como condición de salto que nos permite identificar el error cuando ingresamos al caso EBADF.

Conclusión

En este artículo de Linux Hint, le mostramos cómo usar la función write() para escribir en los archivos. Le mostramos la sintaxis y la descripción teórica de esta función. También te explicamos los métodos de detección e identificación de errores para que dispongas de las herramientas y técnicas necesarias para solucionar rápidamente estos problemas.

Para ayudarlo a ver cómo funciona write(), implementamos el uso de esta función en ejemplos prácticos con códigos e imágenes que muestran el uso de esta y otras funciones de procesamiento de archivos.

También le mostramos cómo seleccionar el modo de apertura de archivo para insertar un texto al principio o al final del archivo, y qué funciones están disponibles para cambiar estos atributos.