El conocimiento de las funciones abiertas, de lectura y escritura es esencial porque siempre los necesitamos para almacenar o eliminar la información que se almacena en los archivos. El idioma C tiene dos funciones básicas que puede usar para abrir los archivos, utilizando las funciones Open () y Fopen (), cada una con diferentes métodos de llamadas.
En este artículo de Sugerencia de Linux, aprenderá cómo usar la función Open (). Explicaremos todo sobre esta función, su sintaxis, la llamada del método, los argumentos de entrada y salida, el tipo de datos que acepta en cada caso y cómo declararlo correctamente.
Luego, aplicaremos lo que aprendimos implementando el uso de esta función en ejemplos prácticos que preparamos para usted con fragmentos e imágenes de código que muestran el uso de la función Open () en el idioma C.
Para que tenga un conocimiento integral, agregamos una sección especial que describe todos los errores que pueden ocurrir al usar esta función, así como su detección e identificación, de modo que en caso de que ocurran, tenga las técnicas necesarias para un solución rápida.
Sintaxis de la función Open () en lenguaje C
int Open (const char *pathname, int flags);Descripción de la función Open () en el lenguaje C
La función Open () abre un archivo para leer o escribir. Esta función abre el archivo que se especifica en el argumento de entrada PathName. Esta entrada debe especificar la ruta absoluta o relativa y el nombre del archivo en formato de cadena o un puntero a ella.
El argumento de entrada de los banderas especifica los atributos que debe tener el archivo. La siguiente es una lista de las banderas que acepta este argumento de entrada y una breve descripción del atributo que cada uno establece:
Bandera | Descripción |
O_rdonly | Abra el archivo solo para leer. |
O_WRONLY | Abra el archivo solo para escribir. |
O_rdwr | Abra el archivo para leer y escribir. |
O_creat | Crea un archivo en la ruta y el nombre especificado en nombre de ruta argumento. |
O_ agregar | Abre el archivo y coloca el cursor al final del contenido. |
O_async | Habilitar el control de entrada y salida por señal. |
O_CLOEXEC | Habilite el modo Coster-on-EXEC en el archivo abierto. |
O_nonblock | Desactiva el bloqueo del archivo abierto. |
O_tmpfile | Crear un archivo temporal sin nombre en la ruta especificada. |
En los casos en que se usan más de una bandera, se debe realizar una operación lógica "o" entre ellos. Esto se puede hacer dentro de los indicadores de argumento de entrada en la misma línea de código que la llamada de función.
Los atributos y los modos se pueden cambiar o consultar una vez que el archivo se abre con la función fcntl ().
La función Open () devuelve un entero que contiene el descriptor del archivo abierto. Este descriptor se utiliza como un argumento de entrada para funciones de procesamiento de archivos como Read (), Write (), etc., Para referirse al archivo.
Esta función se define en el "unistd.encabezado. Los indicadores que definen los atributos y el modo para abrir el archivo se definen en "fcntl.H ". Para usar la función Open (), debe incluir estos encabezados en su código de la siguiente manera:
#incluirCómo abrir un archivo usando la función Open () en el idioma C
En este ejemplo, utilizaremos la función Open () para abrir un archivo en modo de lectura y escritura. En este caso, es un archivo creado previamente llamado "ejemplo.TXT" que se almacena en "Documentos".
Paso 1: El primer paso es incluir los encabezados requeridos y declarar que sale vacío y regresa en la función principal ().
Paso 2: El siguiente paso es declarar las variables que sirven como argumentos de entrada y salida a la función Open (). Como argumento de salida, declaramos el número entero "FD", que es el descriptor de archivo. Como argumento de entrada, declaramos la matriz de caracteres del búfer que contiene la cadena con la ruta y el nombre del archivo que se abrirá.
También declaramos una matriz de 512 caracteres llamado "texto" donde almacenamos el texto que queremos escribir en el archivo que, en este caso, es el primer párrafo de este artículo.
Paso 3: Una vez que se declaran las variables, llamamos a la función Open () y pasamos el entero "FD" como el argumento de salida, la ruta de la cadena como el primer argumento de entrada y el indicador O_WRONLY como el segundo argumento.
Etapa 4: Cuando se abre () devuelve de la llamada, devuelve el descriptor del archivo que se abre en "FD". Luego, escribimos con la función Write (), pasando el descriptor "FD" como el primer argumento de entrada, el texto de la cadena como el segundo argumento de entrada y finalmente el tamaño del texto que se obtiene con la función Strlen (). Después de la operación de escritura, cerramos el archivo con la función Cerrar ().
Aquí está el código completo para este ejemplo:
//Paso 1La siguiente figura muestra la compilación y ejecución de este código junto con el archivo que acabamos de escribir. Como podemos ver, la función Open () abre el archivo correctamente. Luego usamos la función Write () para escribir el contenido del texto. En este caso, contiene el primer párrafo de este artículo:
Errores que pueden ocurrir cuando se usan la función Open (): cómo detectarlos e identificarlos
El uso de la función Open () puede conducir a varios errores. Si este es el caso, devuelve un resultado igual a -1.
La forma más fácil de determinar si se ha producido un error es usar una condición "si" donde la condición es el valor -1 que se devuelve en "FD". Ahora, veamos cómo puede usar este método para determinar si ha ocurrido un error:
fd = open ("ruta/nombre de archivo", banderas);Si la función Open () regresa con un error, va a la instrucción "IF" e imprime el mensaje, "Se produjo un error al intentar abrir el archivo".
Cuando Open () devuelve un resultado igual a -1, almacena automáticamente un código numérico en la variable Global Errno que se define en el "Errno.encabezado. Este código numérico se puede usar para identificar el error que ocurrió.
El siguiente es un extracto de los errores que puede generar la función Open (), junto con una breve descripción de cada error y el valor entero asociado:
Definición | Valor en errno | Error |
Entera | 1 | operación no permitida |
Enoent | 2 | El fichero o directorio no existe |
Eintr | 4 | Llamada del sistema interrumpido |
Enxio | 6 | No hay tal dispositivo o dirección |
Enomem | 12 | Sin memoria |
Eacces | 13 | Permiso denegado |
Enfermo | 14 | Dirección mala |
Ebusy | dieciséis | Dispositivo o recurso ocupado |
Eexist | 17 | El archivo existe |
ENEOVEV | 19 | Hay tal dispositivo |
Enotdir | 20 | No es un directorio |
Eisdir | 21 | Es un directorio |
Einval | 22 | Argumento no válido |
Efile | 23 | Desbordamiento de la tabla de archivos |
Emprender | 24 | Demasiados archivos abiertos |
Etxtbsy | 26 | Archivo de texto ocupado |
Enospc | 28 | no queda espacio en el dispositivo |
EROFS | 30 | Sistema de archivos de sólo lectura |
Enametoolong | 36 | Nombre del archivo demasiado largo |
Aloop | 40 | Demasiados enlaces simbólicos encontrados |
Eoverflow | 75 | Valor demasiado grande para el tipo de datos definidos |
Edquot | 122 | Cuota excedida |
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, considere un ejemplo en el que abrimos un archivo que no existe, lo que resulta en un error. Para detectar un error, usamos la condición "if" que vimos en el fragmento anterior. Para identificarlo, abrimos un interruptor con los tres errores más comunes que esta función puede producir:
#incluirLa siguiente imagen muestra la compilación y ejecución de este código. En él, vemos cómo se detecta el error generado en la condición "IF" y cómo se identifican los errores en el condicional del conmutador para mostrar el mensaje y el valor específico:
Conclusión
En este artículo de Sugerencia de Linux, explicamos cómo usar la función Open () para abrir los archivos.
Le mostramos la sintaxis de esta función y la descripción teórica de cómo funciona, el método de llamada, los argumentos de entrada y el tipo de datos que se usa en cada caso.
Luego implementamos el uso de la función Open () en un ejemplo práctico utilizando fragmentos e imágenes de código. Le mostramos cómo declarar las variables requeridas, llamar a esta función para abrir un archivo y escribirle.
También incluimos una sección donde enumeramos todos los errores que esta función puede generar. Le mostramos las técnicas para detectarlas y clasificarlas para que tenga los medios necesarios para solucionarlos rápidamente cuando ocurran.