Operaciones con Archivos en Linux

En sistemas operativos como Windows, el proceso para gestionar documentos sigue una secuencia estándar: abrir/crear, editar, guardar y cerrar. En entornos Linux, el flujo es análogo, proporcionando el sistema varias funciones de interfaz para realizar estas operaciones: open(), write(), read(), lseek() y close(). A continuación, examinaremos el uso detallado de estas funciones.

1. open()

Al ejecutar man 2 open en la terminal, podemos observar:

En la sección NAME, se presentan tres nombres, y en SYNOPSIS, los tres primeros archivos de encabezado son necesarios al emplear la función open. Continuando, la función open posee dos sobrecargas. La primera recibe dos parámetros: el primero es un puntero constante (una cadena de caracteres) que indica la ubicación del archivo, y el segundo especifica el modo de apertura. Los modos típicos incluyen O_RDONLY (apertrua en modo solo lectura), O_WRONLY (apertura en modo solo escritura) y O_RDWR (apertura en modo lectura y escritura). A continuación, se detallan parámetros opcionales:

O_CREAT: Si el archivo no existe, lo crea. Cuando se utiliza este parámetro, es necesario emplear la segunda sobrecarga para definir los permisos del archivo.

O_EXCL: Comúnmente combinado con O_CREAT. Si el archivo ya existe, la operación de apertura falla y se retorna un error.

O_APPEND: Cada operación de escritura se añade al final del archivo.

O_TRUNC: Al abrir el archivo, si contiene datos previos y se accede en modo solo lectura o solo escritura, su longitud se reduce a cero, eliminando todo el contenido existente.

El parámetro mode establece los permisos del archivo cuando este se crea por primera vez.

La función creat() simplemente crea un archivo, con parámetros similares a los descritos.

Las diferencias entre openat() y open() se resumen en:

(1) Si el parámetro path especifica una ruta absoluta, el parámetro fd se ignora y openat se comporta como open. (2) Si path especifica una ruta relativa, la ruta completa se construye como fd + path. (3) Si path indica una ruta relativa y fd tiene el valor AT_FDCWD, la ruta se interpreta desde el directorio de trabajo actual.

El valor de retorno de la función open es de tipo int. Durante su ejecución, se asigna un identificador único al archivo, facilitando su referencia en operaciones posteriores. Si la creación del archivo falla, la función devuelve -1.

  1. write()

De manera similar, podemos consultar:

Para su uso, es necesario incluir el archivo de encabezado correspondiente. La función presenta un único prototipo:

fd: El identificador del archivo abierto, obtenido mediante la función open

const void *buf: Puntero a la ubicación de memoria que contiene los datos a escribir

count: Cantidad de bytes a escribir en el archivo

Valor de retorno: Número de bytes escritos exitosamente

Si la función devuelve -1, indica que la operación de escritura ha fallado.

  1. Función read()

Analicemos directamente su prototipo:

ssize_t read(int fd, void *buf, size_t count);

fd: Idantificador del archivo, obtenido previamente

void *buf: Puntero al buffer donde se almacenarán los datos leídos

count: Número de bytes que se intentan leer

Valor de retorno: Cantidad real de bytes leídos

Devuelve -1 si ocurre un error durante la lectura.

Es importante considerar que si se realizaron operaciones previas en el archivo, es necesario reposicionar el indicador de archivo en la ubicación deseada antes de leer.

  1. Función lseek()

Su prototipo de función es:

off_t lseek(int fd, off_t offset, int whence);

fd: Identificador del archivo, como se mencionó anteriormente

offset: Valor de desplazamiento relativo a whence, puede ser positivo o negativo

whence: Define el punto de referencia para el desplazamiento, con tres opciones:

SEEK_SET: Posición inicial del archivo

SEEK_CUR: Posición actual del indicador de archivo

SEEK_END: Final del archivo

Valer de retorno: Posición resultante después del desplazamiento

Devuelve -1 si se produce un error durante la operación.

Etiquetas: sistema de archivos llamadas al sistema POSIX linux programación en C

Publicado el 6-28 17:44