PDF de programación - Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 1. Ficheros y entrada/salida

Imágen de pdf Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 1. Ficheros y entrada/salida

Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 1. Ficheros y entrada/salidagráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.063 visualizaciones desde el 14 de Enero del 2017
54,4 KB
11 paginas
Creado hace 9a (30/04/2014)
1



Master en Computación

Plataformas de Tiempo Real

POSIX Avanzado y Extensiones

Tema 1. Ficheros y entrada/salida

Tema 2. Gestión de Interrupciones en MaRTE OS
Tema 3. Monitorización y control del tiempo de ejecución
Tema 4. Planificación EDF
Tema 5. Planificación a Nivel de Aplicación

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

© M. Aldea, M. González

Mayo-2014

Tema 1. Ficheros y entrada/salida
1.1. Conceptos básicos
1.2. Gestión de ficheros
1.3. Llamadas para entrada/salida
1.4.
1.5. Entrada/salida sincronizada
1.6. Funciones de gestión de directorios
1.7. Tuberías y ficheros especiales FIFO

I/O asíncrona con threads

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

© M. Aldea, M. González

Mayo-2014

2

1.1 Conceptos básicos
Fichero: objeto del sistema operativo que se puede leer o escribir,
y que puede significar varias cosas:

- fichero normal: representa información (programas o datos)

1.1 Conceptos básicos

almacenada en el disco

- directorio
- fichero especial de dispositivo orientado a caracteres

Único tipo de fichero obligatorio en el perfil mínimo

- fichero especial de dispositivo orientado a bloques
- tubería o fichero especial FIFO
- opcionalmente: colas de mensajes, semáforos, objetos de

memoria compartida

• cada fichero se identifica mediante un nombre (pathname)

Plataformas de Tiempo Real

© M. Aldea, M. González

Mayo-2014

3

Tema 1. Ficheros y entrada/salida

Sistema de ficheros
El sistema de ficheros es una colección de ficheros junto a ciertos
atributos que los caracterizan
Proporciona un espacio de nombres, y contiene:

1.1 Conceptos básicos

- ficheros normales: residen en memoria secundaria
- directorios
- dispositivos orientados al carácter (sistema mínimo)
- dispositivos orientados a bloque
- tuberías o ficheros especiales FIFO

Se puede hacer I/O sobre todos ellos, excepto los directorios
Si el sistema de ficheros no existe (sistema mínimo), el espacio de
nombres (sin directorios) y los dispositivos se mantienen

© M. Aldea, M. González

Mayo-2014

4

1.1 Conceptos básicos
Conceptos básicos (cont.)

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

Descriptor de fichero (fd)
• Entero positivo que identifica un fichero que ha sido abierto

para I/O

• los descriptores 0, 1, y 2 suelen ser respectivamente la entrada

estándar, la salida estándar, y la salida de error

Descripción de fichero

• Estructura de datos perteneciente al kernel y que existe

asociada a un fichero abierto

• contiene: punteros de lectura/escritura, modo de acceso y

puntero al i-node (MaRTE OS: sólo el modo de acceso)

i-node

• Contiene la información relativa al fichero: localización en el
disco, tamaño, propietario, grupo, permisos, número de links,
etc.

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

© M. Aldea, M. González

Mayo-2014

Compartiendo descripciones de fichero
Entre procesos:
Proceso Padre

1.1 Conceptos básicos

fd 0
fd 1
...
fd i

Proceso Hijo

fd 0
fd 1
...
fd i

Otro Proceso

fd 0
fd 1
...
fd i

Descripciones
de ficheros

puntero lec/esc

puntero a i-nodo

puntero lec/esc

puntero a i-nodo

puntero lec/esc

puntero a i-nodo

...

...

Tabla de
i-nodos

Información
del i-nodo

Información
del i-nodo

...

Plataformas de Tiempo Real

© M. Aldea, M. González

Mayo-2014

5

6

Tema 1. Ficheros y entrada/salida

Compartiendo descripciones de fichero
Entre threads del mismo proceso:

1.1 Conceptos básicos

thread 1

fd0

thread 2

fd0

thread 3

fd1

Descripciones
de ficheros

puntero lec/esc

puntero a i-nodo

puntero lec/esc

puntero a i-nodo

...

...

Tabla de
i-nodos

Información
del i-nodo

Información
del i-nodo

...

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

1.2 Gestión de ficheros
Abrir un fichero:

© M. Aldea, M. González

Mayo-2014

7

1.2 Gestión de ficheros

#include <sys/stat.h>
#include <fcntl.h>
int open (const char *path, int oflag
[, mode_t mode]);
• abre un fichero para leer o escribir
• el path puede ser absoluto o relativo al directorio de trabajo
• crea una nueva descripción de fichero y retorna un descriptor
de fichero asociado a ella
• en caso de error retorna -1 y pone la variable errno al valor
apropiado
- algunos errores: EACCES, EEXIST, ... (ver la página del manual
para un listado completo)

1.2 Gestión de ficheros

(cont.)

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

© M. Aldea, M. González

Mayo-2014

Gestión de ficheros
Las opciones definidas para oflag permiten:
• abrir para leer, escribir, o ambos (sistema mínimo)
- O_RDONLY, O_WROLNY, O_RDWR
• añadir al final del fichero
- O_APPEND
• crear el fichero si no existe: requiere parámetro mode, que
indica los permisos de acceso
- O_CREAT
• truncar (a tamaño 0) el fichero si existe
- O_TRUNC
• I/O bloqueante o no bloqueante, etc. (sistema mínimo)
- O_NONBLOCK

Plataformas de Tiempo Real

© M. Aldea, M. González

Mayo-2014

8

9

Tema 1. Ficheros y entrada/salida

1.2 Gestión de ficheros

Gestión de ficheros
(cont.)
El parámetro mode se pone sólo si se crea el fichero, e indica los
permisos de lectura (R), escritura (W), y ejecución (X)
• Del propietario (USRer)
- S_IRUSR, S_IWUSR, S_IXUSR
• Del grupo de usuarios (GRouP)
- S_IRGRP, S_IWGRP, S_IXGRP
• Del resto de los usuarios (OTHers)
- S_IROTH, S_IWOTH, S_IXOTH

Este parámetro no se utiliza en el perfil de "Sistema de Tiempo
Real Mínimo"
En los sistemas mínimos no se pueden crear ficheros

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

Gestión de ficheros
Cerrar un fichero:

© M. Aldea, M. González

Mayo-2014

10

1.2 Gestión de ficheros

(cont.)

#include <unistd.h>
int close (int fildes);
• destruye el descriptor de fichero
• destruye la descripción del fichero si nadie lo tiene abierto

Crear un fichero: (NO en sistemas mínimos)

#include <sys/stat.h>
#include <fcntl.h>
int creat (const char *path, mode_t mode);
• es equivalente a un open indicando sólo escritura, creación del

fichero, y borrar la información del fichero, si existe

• sólo se puede hacer si hay sistema de ficheros

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

Gestión de ficheros
Borrar un fichero: (NO en sistemas mínimos)

#include <unistd.h>
int unlink (const char *path);
• se borra cuando lo cierra el último proceso

© M. Aldea, M. González

Mayo-2014

11

1.2 Gestión de ficheros

(cont.)

Cambiar de nombre a un fichero: (NO en sistemas mínimos)

#include <stdio.h>
int rename (const char *old, const char *new);
• para ficheros y directorios

Modificar el tamaño de un fichero: (NO en sistemas mínimos)

#include <unistd.h>
int ftruncate (int fildes, off_t length);

Plataformas de Tiempo Real

© M. Aldea, M. González

Mayo-2014

12

Tema 1. Ficheros y entrada/salida

1.3 Llamadas para entrada/salida
Leer:

1.3 Llamadas para entrada/salida

#include <unistd.h>
ssize_t read (int fildes, void *buf,
size_t nbyte);

• Intenta leer nbyte bytes de fichero especificado
almacenándolos en el buffer apuntado por buf
• retorna el número de bytes leídos (<=nbyte)
• retorna 0 cuando se ha llegado al fin de un fichero
• bloqueante o no, según lo definido en el open:
- Bloqueante (sin O_NONBLOCK): el thread se bloquea hasta que
se pueda leer algún dato
- No Bloqueante (con O_NONBLOCK): lee los bytes que puede. Si
no se puede leer ninguno retorna -1 y pone errno al valor
EAGAIN

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

Llamadas para entrada/salida
Escribir:

© M. Aldea, M. González

Mayo-2014

13

1.3 Llamadas para entrada/salida

(cont.)

#include <unistd.h>
ssize_t write (int fildes, const void *buf,
size_t nbyte);

• Intenta escribir nbyte bytes del buffer apuntado por buf en el
fichero especificado por fildes
• retorna el número de bytes escritos (<nbyte si no caben)
• bloqueante o no, según lo definido en el open:
- Bloqueante (sin O_NONBLOCK): el thread se bloquea hasta que
se puedan escribir todos los datos
- No Bloqueante (con O_NONBLOCK): escribe los bytes que
puede. Si no se puede escribir ninguno retorna -1 y pone
errno al valor EAGAIN

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

© M. Aldea, M. González

Mayo-2014

14

1.3 Llamadas para entrada/salida

Ejemplo: Llamadas para entrada/salida
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <misc/error_checks.h>
int main () {
int fd; // descriptor de fichero
char *str = "hola"; char str_leido[10];
int num = 4; int num_leido;
// crea el fichero para escritura
CHKE( fd=open("pru.dat", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR) );
// escribe el string
if (write (fd, str, 5) != 5)
printf ("Error escribiendo string en el fichero \n");
// escribe el número
if (write (fd, &num, sizeof(int)) != sizeof(int))
printf ("Error escribiendo numero en el fichero \n");
// cierra el fichero
CHKE( close(fd) );

Plataformas de Tiempo Real

© M. Aldea, M. González

Mayo-2014

15

Tema 1. Ficheros y entrada/salida

1.3 Llamadas para entrada/salida

Ejemplo: Llamadas para entrada/salida (cont.)

// Lectura de los datos
// abre el fichero para lectura
CHKE( fd = open("pru.dat", O_RDONLY) );

if (read (fd, str_leido, 5) != 5)
printf ("Error leyendo string del fichero \n");
if (read (fd, &num_leido, sizeof(int)) != sizeof(int))
printf ("Error leyendo numero del fichero \n");
CHKE( close(fd) );
printf ("Leído string:%s y num:%d\n", str_leido, num_leido);
return 0;
}

Plataformas de Tiempo Real

Tema 1. Ficheros y entrada/salida

© M. Aldea, M. González

Mayo-2014

16

1.4 I/O asíncrona con threads

1.4 I/O asíncrona con threads
El estándar POSIX proporciona funciones para realizar
operaciones de entrada/salida asíncrona (AIO)

• Cada operación de AIO opera en paralelo con la aplicación

- envía una señal para informar que ha terminado

• Servicio es opcional (NO en sistemas mínimos)

Funciones entrada/salida asícro
  • Links de descarga
http://lwp-l.com/pdf1127

Comentarios de: Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 1. Ficheros y entrada/salida (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad