Niveles de Operaciones de Archivos
Las operaciones de archivos se clasifican en cinco niveles:
1. Nivel de Hardware
- fdisk: Particionamiento de discos
- mkfs: Formateo de particiones
- fsck: Verificación y reparación de sistemas
- Desfragmentación: Compactación de archivos
2. Funciones del Sistema de Archivos
kmount(), kumount() # Montar/desmontar sistemas
kmkdir(), krmdir() # Crear/eliminar directorios
kchdir(), kgetcwd() # Cambiar directorio, obtener ruta
klink(), kunlink() # Enlaces rígidos
kcreat(), kopen() # Crear/abrir archivos
kread(), kwrite() # Leer/escribir datos
klseek(), kclose() # Posicionamiento/cierre
3. Llamadas al Sistema
#include <fcntl.h>
int main(int argc, char *argv[]) {
int descriptor;
char buffer[1024];
if((descriptor = open(argv[1], O_RDONLY)) < 0)
exit(1);
lseek(descriptor, 1024, SEEK_SET);
read(descriptor, buffer, 1024);
close(descriptor);
}
4. Funciones de Biblioteca E/S
fopen(), fread(), fwrite() # E/S con buffer
getc(), putc() # E/S por carácter
gets(), fgets() # E/S por línea
printf(), scanf() # E/S formateada
5. Comandos de Usuario
mkdir, rmdir, ls, cp, mv, chmod, etc. Estos comandos interactúan con:
Comando → Biblioteca E/S → Llamada al Sistema → Función Kernel
Operaciones de Bajo Nivel
Creación de Disco Virtual
dd if=/dev/zero of=diskovd bs=1024 count=32768
Formateo y Montaje
mke2fs -b 4096 /dev/loop1 7936
mount /dev/loop1 /mnt
# Crear estructura de directorios
(cd /mnt; mkdir bin etc usr)
umount /mnt
Sistema de Archivos EXT2
- Bloque 0: Boot Block (arranque)
- Bloque 1: SuperBloque (metadatos del sistema)
- Bloque 2: Descriptores de grupos
- Bloque 8: Mapa de bits de bloques
- Bloque 9: Mapa de bits de inodos
- Bloque 10: Tabla de inodos
Lamadas al Sistema Comunes
// Gestión de directorios
chdir("/ruta");
mkdir("directorio", 0755);
// Manipulación de archivos
int fd = open("archivo", O_RDWR);
write(fd, contenido, longitud);
lseek(fd, offset, SEEK_CUR);
// Enlaces
link("origen", "destino"); // Enlace rígido
symlink("origen", "acceso"); // Enlace simbólico
Implementaciones Prácticas
Navegación de Directorios
#include <unistd.h>
int main() {
char ruta[256];
mkdir("nuevodir", 0755);
chdir("nuevodir");
printf("Directorio: %s\n", getcwd(ruta, 256));
}
Listado de Archivos (simplificado)
#include <sys/stat.h>
int main(int argc, char *argv[]) {
struct stat info;
stat(argv[1], &info);
printf("Permisos: %o\nTamaño: %ld\n",
info.st_mode & 0777, info.st_size);
}
Lecttura de Archivos
#include <fcntl.h>
#define TAM 4096
int main(int argc, char *argv[]) {
int entrada = open(argv[1], O_RDONLY);
char datos[TAM];
while(read(entrada, datos, TAM) > 0) {
write(1, datos, n);
}
close(entrada);
}
Copia de Archivos
#include <fcntl.h>
int main(int argc, char *argv[]) {
int orig = open(argv[1], O_RDONLY);
int dest = open(argv[2], O_WRONLY|O_CREAT, 0644);
char buffer[4096];
ssize_t leidos;
while((leidos = read(orig, buffer, 4096)) > 0) {
write(dest, buffer, leidos);
}
close(orig);
close(dest);
}