PDF de programación - Capítulo 9. Programación de entrada/salida básica

Capítulo 9. Programación de entrada/salida básicagráfica de visualizaciones

Publicado el 17 de Julio del 2017
338 visualizaciones desde el 17 de Julio del 2017
74,0 KB
3 paginas
Creado hace 9a (30/07/2014)
Capítulo 9. Programación de entrada/salida
básica

9.1. Objetivos

Comprender las operaciones básicas de entrada/salida de un secuencial del sistema operativo.

9.2. Documentación de las transparencias

Las transparencias relevantes para realizar esta práctica son:
- Páginas 28-32 de las transparencias de Bibliotecas de C y llamadas al sistema

9.3. Estudio de un programa de copia de ficheros

Estúdiese las operaciones open, read, write, close y exit y estudie y ejecute esta versión
simplificada del programa cp, de copia de ficheros, que toma como parámetros un fichero origen y
uno destino, solamente. Note que si el fichero destino existe, es reemplazado, y si su tamaño era
mayor, es acortado.
cpsimple.c:

#define TAMANO 1024

#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>

char buf[TAMANO];

static void error(char* mensaje) {

write(2, mensaje, strlen(mensaje)); exit(1);

}

int main(int argc, char* argv[]) {

int leidos, escritos, origen, destino;

if (argc != 3) error("Error en argumentos\n");
if ((origen = open(argv[1], O_RDONLY)) < 0) error("Error en origen\n");
if ((destino = open(argv[2], O_CREAT

while ((leidos = read(origen, buf, TAMANO)) > 0) {

if((escritos = write(destino, buf, leidos)) < 0) error("Error en escritura\n");

| O_WRONLY
| O_TRUNC, 0666)) < 0) error("Error en destino\n");

}
if (leidos < 0 ) error("Error en lectura\n");
close(origen);
close(destino);
exit(0);

}

1

Capítulo 9. Programación de entrada/salida básica

Observe que se dan inicialmente permisos de lectura y escritura para todo el mundo (0666 =
rw-rw-rw-); esto es normal, ya que los permisos excesivos se retiran con una umask apropiada1.

9.4. Trazado de llamadas al sistema

Seguidamente ejecútelo controlado por el programa strace, que nos informa de las llamadas al
sistema ejecutadas. Por ejemplo,
strace ./cpsimple /bin/ls mi_ls .
Puede poner la salida en un fichero para estudiarla mejor (por ejemplo, con strace -o traza
./cpsimple /bin/ls mi_ls ). Compare esa traza con la del programa cp.
Observe que hay bastantes llamadas antes de que nuestro programa llegue a ejecutarse. Forman el
prólogo y no es necesario que entienda la mayoría de ellas, al menos de momento. Además observe
que exit no es una llamada al sistema (lo es exit_group o _exit, dependiendo del sistema).

9.5. Entrada salida de bajo y alto nivel

Cambie la rutina error por lo siguiente, que utiliza una rutina de biblioteca, en lugar de una llamada
directa al núcleo. Verifique que funcionan de forma similar y las trazas son equivalentes. Para ello
invoque el programa con algún error (eg: con número de parámetros incorrecto, con fichero origen
que no exista, etc).

#include <stdio.h>

static void error(char* mensaje) {

fprintf(stderr, "%s", mensaje); exit(1);

}

9.6. Ficheros ofrecidos

En el directorio es_basica:

• Programa cpsimple.c.
• Programa compilado cpsimple2, como cpsimple, pero con la rutina error cambiada.

9.7. Resultados pedidos

• Diga qué diferencias importantes observa entre las trazas de cpsimple, cpsimple2 y las de cp.

2

Capítulo 9. Programación de entrada/salida básica

Notas

1. La umask es un mecanismo de seguridad de Unix que permite retirar permisos en la creación de
ficheros de cualquier programa que invoquemos. Así, si creamos un fichero con permisos 0666,
pero la umask vale 0022, los permisos resultantes serán 0644. Puede ver o modificar la umask
con la orden de la shell umask y puede ver una explicación más detallada con man umask.

3
  • Links de descarga
http://lwp-l.com/pdf5434

Comentarios de: Capítulo 9. Programación de entrada/salida básica (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