Transcript
Breve historia 1962 CTSS MIT: tiempo compartido y protección 1967 MULTICS MIT, Bell, GE: el SO más avanzado de su época. Multiusuario, multiproceso, árbol de ficheros, intérprete de órdenes (shell), proceso individual para cada orden. 1973 UNIX@ Bell (Thompson, Ritchie) escrito en C 1978 3BSD @ Berkeley (Joy, Babaoglu): memoria virtual paginada 1980 4BSD @ Berkeley (DARPA) Internet 1988 X y NeWS: sistema de ventanas distribuido 1990 Normalización : Sun + AT&T, POSIX, XOPEN 1991 386BSD, GNU, Linux: versiones libres
Sistema Operativo UNIX
ÿ
¿Que es UNIX?
UNIX: un Sistema Operativo • Compartir la memoria entre los diferentes elementos
Sistema operativo
• Compartir el CPU entre los diferentes procesos
multiproceso y multiusuario
simple y uniforme
portátil, desarrollado casi totalmente en alto nivel
muy potente
• Controlar la creación y el acceso de los archivos • Control del hardware (E/S)
Usuarios
Entorno de trabajo
Programas de aplicación
basado en el modelo de caja de herramientas
concebido para desarrollo
fácil de extender
Administrador de la base de datos El shell
UNIX Hardware
Estructura del sistema ú
û ú
Arquitectura del sistema UNIX shell
ÿ ù
ùø úÿ
ý ù
û ú Manejo de señales Planificación de la CPU Controladores de dispositivos
Gestión de memoria Sistema de E/S Sistema de archivos
ÿþýüûúùø
cc
scripts
csh comp e date a.out
sh who ld wc System calls ccp Kernel grep vi Hard pwd date ware as ps cat ls man more
û ù
aplicaciones
1
Núcleo del sistema UNIX user programs trap
Acceso a un sistema UNIX
libraries
• Para conectarse es necesario:
user level system level
- Un nombre de usuario
system call interface
file system
process control
8 caracteres como máximo, creado por el administrador del sistema, (apellido, nombre, matrícula) inter-process communication
- Una clave de entrada, contraseña o password Creada por el administrador del sistema y modificada por uno mismo formada por al menos seis caracteres, (al menos dos caracteres deben de ser diferentes a letras). Para elegirla adecuadamente: Evitar palabras del diccionario, nombres, números Evitar palabras en idiomas comunes Combinar letras con números Elegir claves que tengan algún sentido (que sea fácil de recordar) Cambiarla con cierta frecuencia
scheduling memory management
buffer cache character block devices devices hardware control
Acceso a un sistema UNIX
El shell (intérprete de comandos)
• Para entrar desde el entorno local en modo texto:
login: milogin Password: ******
El shell es un programa que lee líneas de comando de una terminal o archivo, las interpreta, y le indica a
• Si hay algun error:
UNIX que hacer
Login incorrect login:
• Interfaz entre los usuarios y UNIX • Interprete de comandos
• Si todo va bien, aparece el "prompt": $ para el bourne shell
• Es un lenguaje de programación
% para el C-shell
• El shell no es parte del sistema operativo
ÿ
El shell (intérprete de comandos)
El entorno UNIX
• Cuatro tipos:
Cuando uno entra al sistema UNIX, el sistema les proporciona un Shell. Este Shell proporciona al usuario un entorno propio
El entorno del usuario contiene toda la información necesaria, así como ciertas variables
El shell almacena dos tipos de variables:
1. Bourne shell (sh, bash) Forma parte del de la 7a. edición de UNIX y es el más viejo de los shells principales de UNIX
2. C shell (csh)
+ las variables locales
Es el principal del UNIX BSD, más fácil de usar interactivamente
3. Korn shell (ksh) Extensión del Bourne shell
4. Extended C shell (tcsh) Versión mejorada del C shell
+ las variables exportadas
Las variables locales sólo son conocidas por el Shell que las creó o modificó
Las variables exportadas pueden ser vistas por todos los sub-shells
El comando env despliega en la pantalla la lista de las variables así como su valor
Cada vez que se crean o modifican las variables el entorno del usuario es actualizado
Complementación interactiva de comandos y nombres archivos, llamada sencilla de comandos previos, marca de la hora en la lista histórica...
ÿÿ
ÿ
2
Las variables del shell
Las variables del shell
• El Shell permite almacenar valores dentro de las variables
• Para acceder el contenido de una variable, se debe anteceder el caracter "$" a su nombre,
• El nombre de las variables debe de comenzar por una letra o un "_", seguida por cero o más caracteres alfanuméricos o un "_"
Ejemplo: $ echo $dir_bin
• Para asignar un valor de una variable se debe utilizar el comando set
/usr/toto/bin
$ set variable = valor
$
Ejemplo
• Existen variables utilizadas por el Shell, (mayúsculas), que son creadas e inicializadas en el momento en que el usuario entra al sistema
$set dir_bin = /usr/local/bin
• El contenido de una variable es una cadena de caracteres
Ejemplo: $ echo $TERM $HOME vt100 /home/isa/jossan $
ÿ
La variable PATH
ÿ
Cambio de clave o password
• El Shell utiliza esta variable para saber donde buscar los comandos a ejecutar, cuando el camino de acceso no se proporciona • Esta variable se inicializa después del " login "
• El comando passwd permite modificar el password de un usuario, para esto el usuario deberá de conocer el password de la cuenta que desee modificar.
• El usuario la puede modificar a su voluntad • Los valores comunes son: • Ejemplo:
PATH=.:/bin:/usr/bin
$ passwd
PATH=/bin:/usr/bin:.
Changing password
+ en el primer caso, el directorio actual es explorado primero
Old password:
+ en el segundo caso, el directorio actual es explorado al último
New password:
• Un ejemplo de modificación de la variable PATH es:
Re-enter new password:
$set PATH=/bin:/usr/bin:.:$HOME/bin ÿ
El manual de UNIX
ÿ
La línea de comandos • La línea de comandos empieza en el prompt del Shell, hasta
• Dividido en secciones: 1) Comandos de usuarios
5) Formatos de archivos
2) Llamadas de sistema
6) Juegos
3) Subrutinas
7) Varios
4) Dispositivos
8) Administración de Sistema
• La primera palabra es el nombre de un archivo ejecutable, o de un comando interno del Shell • El comando puede ser seguido por una o más opciones, y/o uno o más argumentos, (separados por espacios o tabulaciones) • La línea de comando no es ejecutado antes del • El Shell contiene cuatro tipos de líneas de comandos:
• Sintaxis man [ opcion ] [ seccion ] titulo(s)
- simple
- secuencial
- pipeline
- agrupado
• Para poder capturar una línea de comando muy larga, es posible de insertar el caracter " \ " al final de la primera línea, después de teclear para poder teclear el resto de la línea de comando en una segunda línea de la terminal
• Ejemplo: $ man mkdir ÿ
ÿ
3
La línea de comandos
Tipos de comandos
nombre [-opciones] [argumentos]
Nombre Cualquier fichero ejecutable que sea accesible nombre absoluto nombre relativo (se busca en PATH) Opciones: son modificadores del programa casi siempre precedidas por casi siempre acumulativas -abcd --opcion ls –alR . ls –lR --all .
a veces con argumentos man -S 1 ls Argumentos son los operandos del programa
Informativas man (por secciones), info, netscape, lynx, gv date, cal, ps, pwd Ejecutivas De usuario: lpr, cp, mv, rm De sistema: sync, halt, reboot, shutdown Procesadoras cmp editores (edit, joe, pico, vi, emacs) sort, cat, head, tail, grep, awk diff
ÿ
Dispositivos estándar
Redirección de dispositivos estándar
Disponibles para todos los procesos
Los utilizan los programas como entrada y salida por defecto.
Entrada sort < fichero
Salida ls ls ls ls
Dispositivos estándar de los procesos
entrada estándar
salida estándar
salida de error
stdin ú
-l -l kk kk
> listado >> listado 2> listado_errores . > todo 2>&1
ÿ
stdout
stderr
Encadenamiento (pipeline) du | sort -n
ÿ
Composición de comandos
Sistema de archivos en UNIX • Archivos ¿Qué son?
Secuencial: date ; who
- Información asociada a un nombre
Paralelo: date & who
- Considerada como una serie de bytes:
Agrupamiento: (sleep 5; date) & date (date ; who) | tee espia | wc (cd / ; ls) | wc -l
+ Caracteres ASCII
Continua si no falla: grep -i amor poema > temp && wc temp
Continua si falla grep -i amor poema > temp || rm temp
+ Código máquina - Almacenados en un disquete, disco duro, o CD
• Tipos de archivos 1. Ordinarios - Contienen una serie de bytes (ASCII, binarios, ambos) - Estructura interna definida por el usuario
2. Directorios 3. Especiales periféricos, (descriptores) - De carácter, de bloque, fifo ... - Se encuentran dentro del directorio /dev
4
Creación de archivos
Nombres de los archivos • Cada archivo, comprendidos los directorios y los archivos especiales, es referenciado por un nombre
• Pueden ser creados por: - un editor (ed, vi, emacs, ex ......) - la redirección de la salida estándar de un programa
• Características del nombre: - 14 caracteres de longitud máxima (sistema V) o 255 (BSD 4.x)
$ ls -l tarea* > salida.txt
- Puede contener cifras y letras (minúsculas y/o mayúsculas)
- algunos comandos (cp, sort, cc, mkdir)
• La administración de los archivos es efectuada por UNIX y es totalmente transparente al usuario
- El primer caracter no puede ser: - + = - No se aconsejan los caracteres especiales, salvo: . , _ • Ejemplos: passwd
test-temp archivo_viejo .cshrc source.c cb.027-01
• Los archivos son generalmente escritos sobre disco • Utilizar convenciones para los nombres de los archivos • Cada archivo está asociado con al menos un nombre
Directorios
• Archivos “invisibles”: empiezan con .
Directorios comunes
• Permiten organizar el sistema de archivos
/bin
contiene los principales comandos
• Referenciados por su nombre, (como los otros archivos)
/etc
contiene los comandos y los archivos utilizados para el mantenimiento y administración del sistema
/lib
contiene librerías y programas de los compiladores
• Contienen dos tipos de información - El nombre del archivo - El número de bloque de control (i-nodo) • El directorio contiene estas informaciones para todos los archivos, otros directorios, y/o archivos especiales que se encuentran a nivel inferior • Cada directorio es creado con dos entradas: - "."
una referencia a él mismo
/tmp contiene los archivos temporales. Los usuarios pueden usarlo como zona de trabajo /dev contiene los archivos especiales de descripción de periféricos /usr
Contiene los comandos locales, algunas librerías, los comandos usuarios, los archivos de los correos, etc. Los directorios de los usuarios pueden encontrarse en este directorio
/usr/bin contiene los comandos complementarios
- ".." una referencia a su padre • Cuando se entra al sistema ("loguearse"), UNIX posiciona al usuario en un directorio: es el directorio HOME
/usr/lib contiene las librerías y los programas suplementarios. También contiene los programas de administración de las impresoras y comunicación /home los directorios de los usuarios pueden encontrarse dentro de sistemas de archivos separados
El directorio HOME
Acceso a archivos en UNIX
• Cada usuario tiene un directorio HOME
• Cada archivo es referenciado por su camino de acceso (pathname) formado por:
• Directorio creado por el administrador del sistema, generalmente es creado dentro del directorio /usr, o /home • Después del "login:" el usuario se encuentra dentro de este directorio, (que se convierte en su directorio de trabajo)
- un nombre o una sucesión de nombres - separados por "/" - terminado por el nombre del archivo o directorio deseado
• Normalmente, el usuario trabajará en los directorios que se encuentran dentro del directorio HOME • Para posicionarse en él basta con teclear: • Una forma de accesarlo desde cualquier directorio es a través del caracter "~", por ejemplo:
Se indican todos los directorios necesarios para acceder a un archivo
$ /home/jossan/practicas/P1/practica1.c
$ pwd
2. relativo
/home/jossan/pruebas $ cp ~/practica1/*.c .
• Existen dos formas de especificar un camino de acceso 1. absoluto
$ cd
o bien
$ cp $HOME/practica1/*.c .
Referido al directorio de trabajo actual
$ practicas/P1/practica1.c
5
Listado del contenido de un directorio
Listado del contenido de un directorio
• ls despliega los nombres de los archivos que se encuentran dentro del directorio actual, • Sintaxis: ls [opciones]
• Ejemplo: $ ls -l
total 4
• Algunas opciones: -a lista los archivos que comienzan con un "." -l listado en formato largo
d r w x r - x r - x 2 jossan isa
4096 Feb 12 20:13 mail
d r w x r - x r - x 2 jossan isa
4096 Dec 11 12:43 posix
- r w x r - x r - x 1 jossan isa
-s da el tamaño de los archivos en kilo-bytes
240 Feb 15 19:57 prueba.c
- r w - r - x - - x 1 jossan isa 11668 Feb 12 20:14 zz
-u despliega la última hora de acceso en lugar de la última hora de modificación
$
-t lista los archivos en función de la hora de la última modificación • Nota: las opciones pueden estar mezcladas: $ ls -altr ÿ
Listado del contenido de un directorio
Comandos útiles con archivos
• Despliega la siguiente información:
- more • despliega el contenido de un archivo parándose entre cada
- El tipo de archivo: -
normal
d
directorio
c
especial (periférico en modo carácter)
$ more .cshrc - cat
- Los permisos de acceso de los archivos: r
lectura
w
escritura
x
ejecución
-
acceso no permitido
pantalla
• Ejemplo
• copia uno o varios archivos hacia la salida estándar • Ejemplo $ cat archivo.txt
- pwd
print name of working directory
- Número de enlaces
• despliega el camino de acceso del directorio actual.
- Propietario y grupo
• Ejemplo:
- Tamaño
$ pwd
- Fecha y hora de la última modificación
/home/jossan/practicas/P1
- Nombre del archivo o directorio
La entrada y salida estándar
La entrada y salida estándar
• Cuando se realiza una conexión a un sistema UNIX tres archivos son abiertos:
• Algunos comandos no leen sus argumentos de la entrada estándar sino de uno o más archivos
1. Entrada estándar, (stdin): el teclado por donde se teclean los comandos 2. Salida estándar, (stdout): la pantalla donde son desplegados los resultados de los comandos
• Ejemplo: $ cat arch1 arch2 lee los archivos "arch1" y "arch2", desplegando su contenido en la salida estándar.
3. Salida de errores, (stderr): la pantalla donde son desplegados los errores eventuales • Un número, (el descriptor de archivo), es asignado a cada archivo: • 0: entrada estándar stdout
• 1: salida estándar
cat stdin
• 2: salida de errores
stderr
stdout stdin
UNIX stderr
arch1 arch2
6
Redirección de las E/S estándar
Redirección de la entrada estándar
El shell permite redireccionar las entradas/salidas estándar: <
$mail profesor < tarea.txt
redirección de la entrada estándar. La entrada estándar será el archivo " tarea.txt "
> redirección de la salida estándar (creación) >> redirección de la salida estándar (añadir/agregar) La redirección de la salida de error depende del shell. bshell
stderr
cshell mail
2> redirección de la
>& redirección de la salida estándar
salida de error
stdin
y de error stdout
2>&1 redirección de la
No existe opción para redirecccionar
salida estándar y de error
sólo la salida de error.
/usr/spool/mail/profesor
tarea.txt
a la salida estándar
Redirección de la salida estándar
Redirección de la salida estándar
$cat arch1 arch2 > final.txt
$echo ERRORES DE COPIA >> log
- Los archivos "arch1" y "arch2" serán copiados uno después del otro en el archivo "final.txt"
- La salida estándar del comando echo será el archivo "log" - Si el archivo ya existe, se añadirá el resultado del comando echo al final de dicho archivo
- La salida estándar de cat es "final.txt"
stderr stderr cat mail
stdin stdin
stdout
stdout final.txt log arch1 arch2
Restricciones de la redirección
Ejecución de comandos secuenciales • Es posible teclear diferentes comandos sobre la misma línea, separandolos por punto y comas " ; "
¿Existe el archivo?
SI
• Los comandos son ejecutados secuencialmente, es decir que el segundo comando es ejecutado después de que el primero terminó su ejecución
NO
<
lee el archivo
error
>
error
creación del archivo
Wed Oct 12 10:44:16 MET 1986
>>
añadirlo al final del archivo
error
rgomez
console
Oct 12 09:09
rgomez
ttyp0
Oct 12 10:38
toto
ttyp1
Oct 12 11:08
$ date; ls ; prueba
who
archivo
ÿ
7
Pipelines
Ejecución en background
• La salida estándar de un comando puedo ser conectada a la entrada estándar de otro comando
• Concepto de job en cshell: Cuando se teclea un comando se le asigna un número de job.
• Evita la creación de archivos temporales
• Para los comandos lentos en su ejecución resulta interesante poder disponer de la terminal, de tal forma que se pueda ejecutar otros comandos..
$ cat nombres | grep maquina | more
• Poniendo un " & " después de la línea de comando, éste se ejecutará en background, de una forma sincrónica
stdout
stderr
% netscape tareas.html -display walhalla: 0.0 & [1] 712
cat
grep
more
1
es el número de job
712
identificador del proceso
• Para regresarlo a foreground se usa el comando fg seguido del número de job nombres stdin
Agrupación de comandos • Si se agrupan varios comandos entre "( )" o "{ }", estos seran considerados como una sola unidad
%fg %1
Comandos UNIX - cd • cambio de directorio • cd sin nombre lo posiciona en el directorio HOME
• Esto es interesante para la redirección de entradas y salidas
$ cd tareas
Los siguientes comandos: $ echo El dia de hoy: > log
- mkdir • creación de directorios
$ date >> log $ echo las personas siguientes >> log
$mkdir /usr/usr2/alumno1 - rmdir
$ who >> log
• eliminación de directorios
$ echo se encuentran conectadas >> log
• rmdir no borrará el directorio si este no se encuentra vacío $rmdir tareas
pueden agruparse en uno solo: $ ( echo El dia de hoy; date; echo las personas \ siguientes; who; echo se encuentran conectadas ) > log
Comandos UNIX - date
Comandos UNIX - cp
• Despliega la fecha y la hora
• copia un archivo ordinario con otro nombre o a un directorio
$ date
$ cp arch1 arch2
Mon Oct 10 15:58:58 MET 1988
$ cp arch1 direc
• La impresión del comando date puede ser reformateada - who
$ cp arch1 direc/arch2 $ cp arch1 arch2 arch3 direc
• Despliega los usuarios conectados $who
• cp no modifica los archivos originales, tan solo los duplica -mv (move)
guimen
console Feb 10 09:48
rgomez
ttyp0
Feb 10 11:18
$ mv arch-a arch-b
jossan
ttyp1
Feb 10 12:54
$ mv direc1 direc2
• Una variante es whoami que despliega información correspondiente a la persona conectada a la terminal donde se tecleo ese comando
• desplaza un archivo o lo renombra
$ mv arch1 arch2 arch3 arch4 direc $ mv arch1 ../bin/fx
8
Comandos UNIX
Comandos UNIX
- ln (link)
- ln (link)
• crea un nuevo nombre para un archivo, (útil para archivos sistemas, evitar copiar dos archivos con el mismo nombre => ahorrar espacio )
• En BSD 4.x es posible crear enlaces simbólicos entre archivos o directorios correspondientes a sistemas de archivos diferentes
• solamente con la opción -s se puede cambiar el nombre a un directorio
$ ls
$ ls -li /* listado largo con i-node */
arch1 dir1
total 2
$ ln -s arch1 fichero
14411 -rw-r--r-- 1 rgomez
412 Oct 10 16:56 arch1
14412 -rw-r--r-- 1 rgomez
167 Oct 10 16:57 archivo
$ ln -s dir1 fuentes $ ls -li
$ ln arch1 fichero
total 4
$ ls -li
14411 -rw-r--r--
total 3 14411 -rw-r--r-- 2 rgomez
1 rgomez 412 Oct 10 16:56 arch1
14412 lrwxrwxrwx 1 rgomez 412 Oct 10 16:56 arch1
14411 -rw-r--r-- 2 rgomez
412 Oct 10 16:56 fichero
14412 -rw-r--r-- 1 rgomez
167 Oct 10 16:57 archivo
4 Oct 10 17:09 fichier -> arch1
38935 drwxr-xr-x 2 rgomez 512 Oct 10 17:09 dir1 14413 lrwxrwxrwx 2 rgomez
Comandos UNIX
4 Oct 10 17:10 fuentes -> dir1
Otros comandos
- rm (remove)
- ps
• borra el nombre de un archivo
• listado de los procesos que se están ejecutando
• si ese nombre fuera el último (numero de enlaces = 1), el archivo será "físicamente" suprimido $ rm arch1 • Opciones:
- lpr • crea un trabajo de impresión en el área de spooling para su posterior impresión - lpq
-r recursivamente (si directorio contiene otro, borra contenido de este)
• permite ver el estado de las colas de espera de impresión - lprm
-f forzado (no despliega errores, ni hace preguntas)
• permite suprimir archivos en espera de ser impresos
-i interactivo (pregunta)
- grep
- echo
• permite encontrar patrones en archivos
• imprime sus argumentos sobre la salida estándar (la pantalla por default) $ echo prueba del comando echo prueba del comando echo
- sort • permite ordenar las lineas de un archivo de texto
ÿ
Otros comandos - wc • cuenta líneas, palabras y caracteres
Categorías de usuarios en UNIX En UNIX el acceso a los archivos y directorios se diferencia en función de tres categorías de usuarios:
- tail • muestra las últimas líneas de un archivo - head • muestra las primeras líneas de un archivo
1. Propietario • El propietario del archivo • En principio se refiere al que creó el archivo
- uname • despliega información acerca del sistema en el que se está trabajando - tty • identifica el terminal de usuario
2. Grupo En principio se refiere al grupo al cual pertenece el creador del archivo 3. Otros El resto del mundo
9
Autorización de acceso a archivos
Cambio de la autorización de acceso
+ A través de ls -l podemos ver las autorizaciones de los archivos:
• El comando chmod permite modificar las autorizaciones de acceso de los archivos y de los directorios ya creados
r
w x
r w x
r w x
0 0 0
0 0 0
0 0 0
...
...
...
1 1 1
1 1 1
1 1 1
propietario
grupo
otros
• Existen dos formas de especificar el nuevo modo: + en octal:
chmod ooo archivo
+ en modo simbolico:
chmod [ ugoa ] [+ = -] [ rwx ]
u permisos del usuario g permisos del grupo
+
archivos r
autorización de
directorios
lectura
lectura
w autorización de
escritura
escritura (creación, modificación o supresión)
x autorización de
ejecución
acceso
o permisos de los otros a todos los permisos
Llamadas al sistema
Llamadas al Sistema
Sistema de ficheros: open, creat close read, write lseek unlink
Gestión de procesos
Comunicación entre procesos señales
fork, exec, exit, wait
signal, kill
pipes, fifos
IPC (Inter Process Communication) colas de mensajes semaforos segmentos de memoria compartida
Creación de Procesos
Creación de Procesos ejemplo:
#include #include
main() {
int pid; printf(“Before fork\n”); pid= fork() if (pid==0) printf(“child process\n”); else if (pid > 0) printf(“parent process\n”); else perror(“Fork returned error:\n”);
pid_t fork(void ); fork() devuelve 0 al hijo y el ID del hijo al padre. }
Fork crea una segunda instancia del mismo proceso. El código de programa así como las variables son las mismas en ambos procesos. before fork after fork PC pid = fork0 if (pid == 0)
parent process
PC
pid = fork0 if (pid == 0)
parent process pid = child's pid
PC
pid = fork0 if (pid == 0)
pid = 0
10
Ejecución de programas
Ejecución de programas
Familia de llamadas al sistema “exec”
La llamada exec carga un nuevo programa en el espacio de memoria del proceso que llama.
El programa viejo es sustituido por el nuevo
Secuencia de llamadas fork, exec, wait, exit
program a
program a
wait program a continues afterr exit of program b
fork copy of program a exec program b exit
usage of wait and exit:
Espera de finalización de procesos
path: file:
child = fork ( ) ; /*PID de un nuevo proceso */ if (child>0) { /* El código del padre*/ }else if (child == 0){ /* aquí va el código del hijo */ execl ( “/usr/bin/ls“, ”ls“, “-l”, NULL); perror ( “fallo en execl “); /* en caso de error en execl */ exit (1); }else{ /* en caso de error en fork */ perror(“fallo en fork()”); exit(2); } /* aquí continúa el padre */
wait() devuelve el ID de dicho hijo y de lo contrario devuelve –1. Como argumento, devuelve un puntero al status (causa) de su finalización.
#include int dup(int fd); /* devuelve el descriptor más pequeño disponible y lo asocia al mismo archivo que el descriptor fd */ int dup2(int fd0, int fd1); /* asocia al descriptor fd1 el mismo archivo que está asociado a fd0 */
debe ser un programa ejecutable puede ser un programa ejecutable o un shell script
Ejemplo
#include #include pid_t wait (int*status); pid_t waitpid (pid_t which, int *status, int option);
Redireccionamiento
pid = wait(&status) exit(status)
Int execl(const char *path, const char *arg0, ..., const char *argn, char * /* NULL */); Int execle(const char *path, char *const arg0[], ..., const char *argn, char * /* NULL */, char *const envp[]); Int execlp(const char *file, const char *arg0, ..., const char *argn, char * /* NULL */); Int execv(const char *path, char *const argv[]); Int execvp(const char *file, char *const argv[]); Int execve(const char *path, char *const argv[], char *const envp[]);
Tuberías sin Nombre : pipe
#include int pipe(int fd[2]);
fd[0] estará asociado al extremo de lectura fd[1] estará asociado al extremo de escritura
11
Tuberías sin Nombre: pipe ý
ûüý øø ù ý ú ø ø
ø ÿù ø ø ÿ øø ø øøø
øø
øø ø
#include #include
int mkfifo(const char *path, mode_t mode);
ø ý øøø øý ù øø ú
øøø øøø øøø
ø
ø
ü
øø øøø øøø
Tuberias con Nombre: FIFO
ú ùøý øû ø ü
øø øø ú ø ø
ýø ø ú ø øø ø ú ú ø ø ú ø
ü øý øû ø ü
ø ø
A
B
A
B
øø
øø ýø øøø ûúù øøø ý øøø
ø øø ø ø ú ùúø úø øø ø ø ûø ÿúøý ø ù ø ü ø ûø úøû ø ù øøý øû ø ü
ø ýø ø øøø ûúù øøø ø
øø ø ø ú ùúø ý ø øø ø ø ûø ÿúøý øû øÿù ø
ü ø ø
ü
ü ø
Envío de Señales
Máscara y Conjunto de Señales
#include #include int kill(pid_t pid, int sig)
#include raise(SIGUSR1);
Espera de Señales
#include sigemptyset(sigset_t *set); sigfillset(sigset_t *set); sigaddset(sigset_t *set , int signo); sigdelset(sigset_t *set , int signo); sigismember(const sigset_t *set , int signo, int signo);
Identificación de canales IPC
#include int pause(void);
#include #include
#include int sigsuspend(const sigset_t *sigmask);
key_t ftok(const char *path, int id);
ÿ
12
Colas de mensajes
Semáforos
#include #include #include
#include #include #include
int msgget(key_t keym, int msgflg); void msgsnd(int msgid, struct msgbuf *ptr, int length, int flag); int msgrcv(int msgaid, struct msgbuf *ptr, int length, long msgtype, int flag); int msgctl(int msgid, int cmd, struct msgid_ds *buf);
int semget(key_t key, int nsems, int semflg); int semop (int semid, struct sembuf *sops, int nsops); int semctl (int semid, int semnum, int cmd, ...);
Memoria Compartida #include #include #include int shmget(key_t keym int size, int shmflg); void *shmat(int shmid, void *shmaddr, int shmflg); int shmdt(void *shmaddr); int shmctl(int shmid, int cmd, struct shmid_ds *buf);
Sistema Operativo UNIX
13