/* 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 escriben 100 bloques de 25 bytes. */ /* Si entiendes el manejo de ficheros a bajo nivel en UNIX */ /* y una vez estudidado el programa deberias saber responder */ /* las siguientes cuestiones: */ /* ¿Que pasa si el fichero a abrir no existe? */ /* Supon que el fichero existe: ¿que condiciones se han de */ /* cumplir para la apertuta se realice con exito? */ /* realice con exito? */ /* ¿Que posiciones del fichero seran accedidas (escritas) */ /* Una vez ejecutado con exito el programa, ¿que tamaño tendra */ /* el fichero? */ /* Ficheros cabecera utilizados */ #include #include #include #include /* Definicion de algunas constantes */ #define NUM_BLOQ 100 #define BYTES_TRANSF 25 #define DNOM_FICHERO 100 #define ERROR -1 extern int errno; char buffer[BYTES_TRANSF]; char nombre[DNOM_FICHERO]; main() { int fd , i, j, off ; ssize_t nbytes ; /* Entrada del nombre del fichero */ printf("\n Nombre del fichero: ") ; scanf("%s",nombre) ; /* Apertura: fijate en los parametros */ fd = open( nombre , O_WRONLY|O_CREAT , 0666 ) ; /* 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 */ for ( i=0 ; i < NUM_BLOQ ; i++ ) { /* La variable off tendra el modulo 10 de i */ off = i%10; for ( j=0; j < BYTES_TRANSF; j++ ) /* ¿Que valor tendra buffer[j]? */ buffer[j] = 65 + off; /* Escribimos el buffer */ nbytes = write( fd , buffer , (size_t)BYTES_TRANSF ) ; /* Comprobamos resultado de la escritura */ if ( nbytes != (ssize_t)BYTES_TRANSF ) { perror("ERROR EN ESCRITURA: ") ; if ( close(fd) == ERROR ) perror("ERROR EN CIERRE: "); break; } } /* Cerramos el archivo */ if ( close(fd) == ERROR ) perror("ERROR EN CIERRE: "); }