/* Este es un programa ejemplo sencillo que ilustra como */ /* se manejan ficheros a bajo nivel en UNIX, en este programa */ /* se abre un fichero y se leen bloques de 512 bytes */ /* de forma aleatoria (no secuencial) utilizando la funcion */ /* lseek */ /* Si entiendes el manejo de ficheros a bajo nivel en UNIX */ /* deberias ser capaz de completar el programa */ /* Aņade los fichero cabecera que se requieren */ /* Definicion de algunas constantes utilizadas */ #define BYTES_TRANSF 512 #define DNOM_FICHERO 100 #define ERROR -1 #define SALIR -1 extern int errno; char buffer[BYTES_TRANSF]; char nombre[DNOM_FICHERO]; main() { int fd , i, j, off ; ssize_t nbytes ; size_t tam ; /* Entrada del nombre del fichero */ printf("\n Nombre del fichero: ") ; scanf("%s",nombre) ; /* Apertura: completala */ fd = open( ) ; /* Se comprueba resultado de la funcion open */ if ( fd == ERROR ) { perror("ERROR EN APERTURA: "); return ; } /* Bucle para escribir 100 bloques de 512 bytes casa uno */ do { printf("\nPosicion (-1 para terminar):"); scanf("%d",&offset); if ( offset == SALIR ) break; /* Posicionamiento del puntero del archivo */ /* Completa la invocacion a lseek */ ret_lseek = lseek( ); if ( ret_lseek == ERROR ) { perror("ERROR EN EL POSICIONAMIENTO: "); break; } /* Leemos en buffer: completa la invocacion a read */ nbytes = read( ) ; /* Comprobamos resultado de la escritura */ if ( nbytes == ERROR ) { perror("ERROR EN LECTURA:") ; break; } } while (-1); /* Cerramos el archivo */ if ( close(fd) == ERROR ) perror("ERROR EN CIERRE: "); }