Operaciones de Archivos y Llamadas al Sistema en Linux

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);
}

Etiquetas: linux EXT2 llamadas al sistema Operaciones de Archivos Administración de Archivos

Publicado el 7-13 18:30