Llamada al sistema
Las llamada al sistema son interfaces entre el software de usuario y el kernel del sistema operativo. En el contexto de la programación en el shell, estas llamadas proporcionan acceso a funciones de bajo nivel que permiten la manipulación de procesos, archivos y otros recursos del sistema.
Creación y Gestión de Procesos:
fork()
: Crear un Proceso Hijo
La llamada fork()
crea un nuevo proceso llamado proceso hijo. Este proceso hijo es una copia exacta del proceso padre, pero tiene su propio espacio de memoria. La bifurcación se utiliza comúnmente en la programación de shell para ejecutar procesos en segundo plano.
pid_t child_pid = fork();
exec()
: Reemplazar la Imagen del Proceso
Después de crear un proceso hijo, la llamada exec()
se utiliza para reemplazar su imagen con otro programa. Existen variantes como execvp
, que busca el programa en el directorio PATH.
execvp("ls", args);
wait()
y waitpid()
: Esperar a que un Proceso Termine
Estas llamadas permiten que un proceso padre espere a que su proceso hijo complete su ejecución. waitpid()
proporciona más control al permitir esperar a un proceso específico.
int status; wait(&status);
Manipulación de Archivos:
open()
y close()
: Abrir y Cerrar Archivos
open()
se usa para abrir un archivo, mientras que close()
cierra un descriptor de archivo abierto.
int fd = open("archivo.txt", O_RDONLY); close(fd);
read()
y write()
: Lectura y Escritura de Archivos
Estas llamadas permiten la lectura y escritura de datos desde/hacia un archivo.
char buffer[1024]; read(fd, buffer, sizeof(buffer)); write(fd, "Datos a escribir", strlen("Datos a escribir"));
Gestión de Procesos
kill()
: Enviar Señales a Procesos
La llamada kill()
se utiliza para enviar señales a procesos. La señal SIGTERM (15) generalmente se utiliza para solicitar que un proceso termine.
kill(PID, SIGTERM);
ps()
y top()
: Obtener Información de Procesos
Aunque no son llamadas al sistema directas, los comandos ps
y top
proporcionan información sobre los procesos en ejecución.
ps aux top
Comunicación entre Procesos
pipe()
: Crear una Tubería
La llamada pipe()
se usa para crear una tubería, permitiendo la comunicación entre dos procesos.
int my_pipe[2]; pipe(my_pipe);
shmget()
, shmat()
, y shmdt()
: Memoria Compartida
Estas llamadas se utilizan para la gestión de memoria compartida entre procesos.
int shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT | 0666);
Otros
chdir()
: Cambiar Directorio de Trabajo
La llamada chdir()
se usa para cambiar el directorio de trabajo del proceso.
chdir("/ruta/nuevo/directorio");
umask()
: Establecer la Máscara de Modo
La máscara de modo se configura con umask()
, afectando los permisos de los archivos creados por el proceso.
umask(027);
time()
y date()
: Obtener Información Temporal
Estas llamadas proporcionan información sobre la hora y la fecha actual.
time date
Estos ejemplos ilustran algunas de las muchas llamadas al sistema que forman la base de la programación en el shell. Cada llamada ofrece funcionalidades esenciales que permiten a los programas de shell interactuar de manera efectiva con el sistema operativo y sus recursos.