Lección 16: descriptores de archivo — open, read, write
Todo archivo, pipe, socket y dispositivo al que un programa accede en Linux se representa como un descriptor de archivo (file descriptor) — un número entero pequeño que apunta a una entrada en la tabla de archivos del proceso. Las llamadas open, read, write, close y lseek son los primitivos de I/O d
Un descriptor de archivo es como el número de una mesa en un restaurante: no necesitas recordar la dirección de la cocina — solo dices el número y el sistema operativo sabe exactamente a qué archivo te refieres.
- file descriptor
- Un número entero pequeño y no negativo que identifica un archivo abierto dentro de un proceso. stdin=0, stdout=1, stderr=2. open() devuelve el FD disponible más bajo.
- open
- Llamada al sistema que abre un archivo y devuelve un descriptor de archivo. Recibe una ruta, opciones (O_RDONLY, O_WRONLY, O_CREAT, O_TRUNC) y un modo para crear archivos nuevos.
- read
- Llamada al sistema que lee hasta n bytes de un descriptor de archivo hacia un buffer. Devuelve la cantidad de bytes realmente leídos, 0 en EOF, y -1 en caso de error.
- write
- Llamada al sistema que escribe n bytes de un buffer a un descriptor de archivo. Devuelve la cantidad de bytes realmente escritos — puede escribir menos de lo solicitado.
- lseek
- Llamada al sistema que reposiciona el offset de archivo de un descriptor. Permite lectura/escritura de acceso aleatorio dentro de un archivo. SEEK_SET, SEEK_CUR, SEEK_END son los valores de whence.