ejemplos de llamadas al sistema

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

Upload: maiaporsiempre

Post on 09-Aug-2015

51 views

Category:

Education


1 download

TRANSCRIPT

Page 1: 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

Page 2: Ejemplos de llamadas al sistema

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:

Page 3: Ejemplos de llamadas al sistema

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

}

Page 4: Ejemplos de llamadas al sistema

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

Page 5: Ejemplos de llamadas al sistema

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

}

}