Download - Ejemplos de llamadas al sistema
Palma García Blanca Lic.En.Informatica Ejemplos de llamadas al sistema
Ejemplos de llamadas al sistema
– Creación de nuevos ficheros: creat.
Ejemplo 1: crear fichero y escribir en el del 0 al 9
a)
Llamadas al Sistema en UNIX.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
{ int i, fd;
fd=creat(“prueba”,0600);
for (i=0;i<10;i++) write(fd,&i,sizeof(i));
exit(0);
}
#include <stdio.h>
#include <fcntl.h>
{ int i, fd, vector[10];
fd=creat(“prueba”,0600);
for (i=0;i<10;i++) vector[i]=i ;
exit(0);
}
int main()
write(fd,vector,sizeof(vector));
Cerrar un fichero: close.
• Cuando no se va a acceder a los datos de un fichero se
Palma García Blanca Lic.En.Informatica Ejemplos de llamadas al sistemacierra.
• La utilidad es dejar libre un descriptor de ficheros.
• Sintaxis: #include <unistd.h>
int close(descriptor_fichero);
int descriptor_fichero;
• Devuelve:
0 si se ha cerrado el fichero ó -1 en caso contrario.
Ejemplo 2:
Llamadas al Sistema en UNIX.
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
{ int fd, i, vector[10];
for (i=0;i<10;i++) vector[i]=i;
close(fd);
}
int main()
write(fd,vector,sizeof(vector));
exit(0);
–Acceso a ficheros existentes: open.
• Sintaxis: #include <fcntl.h>
int open(nombre, modo, permisos);
const char *nombre;
int modo, permisos; • Devuelve:
• -1 si se produce un error
• El número de descriptor asociado al fichero abierto (el más
bajo libre en la tabla de descriptores).
• Modos:
Palma García Blanca Lic.En.Informatica Ejemplos de llamadas al sistemaO_RDONLY (0) El fichero se abre para lectura. El puntero en byte 0.
O_WRONLY (1) El fichero se abre para escritura. Puntero en byte 0.
O_RDWR (2) El fichero se abre en modo lectura/escritura
O_CREAT Sino existe el fichero se crea.
O_TRUNC Si existe se borra la información que contiene.
O_EXCL Con O_CREAT la llamada falla si el fichero existe.
O_APPEND El puntero del fichero apunta al final del mismo
Ejemplo 3: escribir en prueba de 0 a 9 y después leer el
contenido de prueba e imprimir en pantalla.
Llamadas al Sistema en UNIX.
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{ int fd, i, vector[10], dato, leidos;
fd= creat(“prueba”,0600);
for (i=0;i<10;i++) vector[i];
write(fd,vector,sizeof(vector));
close(fd);
fd= open(“prueba”,O_RDONLY);
while ((leidos= read(fd,&dato,sizeof(int)))>0)
{ printf(“Leido el número %d\n”,dato); }
close(fd);
exit(0);
}
Palma García Blanca Lic.En.Informatica Ejemplos de llamadas al sistema
Gestión de procesos: fork, wait, exit, execlp, execvp, pipe y dup.
– Hay una versión jerárquica de procesos:
• Un proceso (hijo) aparece porque otro proceso lo genera
(padre) mediante una llamada al sistema.
• Clases de llamadas:
– Para generar y controlar procesos: fork, wait, exec.
– Para reiniciar el código del proceso: execlp, execvp.
– Para comunicación entre procesos: pipe, dup.
– Crear un nuevo proceso: fork.
• Sintaxis: pid=fork();
int pid;
• Si un proceso la ejecuta, se crea otro proceso que es réplica
de si mismo en memoria:
– El código (programa) de los dos procesos es el mismo.
– Cada proceso continua la ejecución por separado (en el punto
de la llamada).
– Todas las variables serán idénticas.
– Los descriptores de ficheros son iguales.
• ¿Cómo se distingue entre el padre y el hijo?
– fork() devuelve un entero:
• Valdrá cero en el hijo.
• Valdrá el identificador del proceso hijo en el padre.
Ejemplo 4: #include <stdio.h>
main()
{ printf(“Inicio de test\n”);
if (fork() = = 0)
printf(“Yo soy el hijo \n”);
else
Palma García Blanca Lic.En.Informatica Ejemplos de llamadas al sistemaprintf(“Yo soy el padre \n”);
exit(0);
}
Ejemplo 5: #include <stdio.h>
int main()
{ int i, j;
if (fork()!=0)
else
exit(0); }
Llamadas al Sistema en UNIX.
{ for (i=0;i<100;i++)
{ for (j=0;j<100000;j++);
printf(“Proceso padre. Indice i=%d\n”,i);
}
}
{ for (i=0;i<100;i++)
{ for (j=0;j<100000;j++);
printf(“Proceso hijo. Indice i=%d\n”,i);
}
}