Lectura del programa fuente Compiladores 2. Lectura del programa fuente M. en C. Cynthia A. Rodrı́guez Villalobos 2011-O 1/4 Lectura del programa fuente Lectura del programa fuente I Las rutinas estándar para lectura del lenguaje de implementación: I I I I Antes, los compiladores utilizaban tcnicas de buffering, para acelerar la lectura del archivo utilizando poca memoria. Ahora, se recomienda leer el archivo completo (de ser posible) con una llamada al sistema. I I I I I 2/4 suelen ser lentas pueden alterar caracteres Es rápido Las máquinas tienen “mucha” memoria Se puede conocer el tamaño de un archivo: se asigna la memoria necesaria antes de leer el archivo Es más fácil manejar tokens de longitud variable Se pueden generar mensajes de error más precisos Lectura del programa fuente Lectura del programa fuente UNIX En UNIX/C se puede utilizar: open close #i n c l u d e <f c n t l . h> #i n c l u d e <u n i s t d . h> i n t open ( c o n s t c h a r ∗path , i n t oflag ) ; i n t close ( i n t fd ) ; read #i n c l u d e <s y s / t y p e s . h> #i n c l u d e <u n i s t d . h> ssize_t read ( i n t fd , v o i d ∗buffer , size_t nBytes ) ; 3/4 Lectura del programa fuente Lectura del programa fuente Ejemplo: lectura.c #i n c l u d e <s y s / t y p e s . h> #i n c l u d e <f c n t l . h> #i n c l u d e <u n i s t d . h> #i n c l u d e <s t d l i b . h> #i n c l u d e <s t r i n g . h> #i n c l u d e <s t d i o . h> #d e f i n e BUFFER SIZE 16384 i n t main ( i n t argc , c h a r ∗∗argv ){ i n t fd , rd_count , contador =0; c h a r buffer [ BUFFER_SIZE ] ; i f ( argc !=2) exit ( 1 ) ; fd=open ( argv [ 1 ] , O_RDONLY ) ; i f ( fd <0) exit ( 2 ) ; printf ( ” L e y e n d o a r c h i v o %s \n” , argv [ 1 ] ) ; w h i l e (1){ rd_count=read ( fd , buffer , BUFFER_SIZE ) ; i f ( rd_count <=0) b r e a k ; contador++; }printf ( ” Se l e y e r o n %d b l o q u e s \n” , contador ) ; i f ( rd_count==0) exit ( 0 ) ; e l s e exit ( 3 ) ; } 4/4 Salida: Leyendo archivo lectura . c Se leyeron 1 bloques