-   
-   
- /* -------------------------------*/ 
- /*           grep_rw              */ 
- /*                                */ 
- /* Búsqueda de una cadena en      */ 
- /* varios archivos con la técnica */ 
- /* read/write                     */ 
- /*--------------------------------*/ 
-   
- #include <stdio.h> 
- #include <string.h> 
- #include <stdlib.h> 
- #include <fcntl.h> 
- #include <sys/time.h> 
-   
- int grep_rw (char *cadena, char *archivo) { 
-   
-   int descriptor, valor_lectura, linea=1, linea_vista=0, interruptor=0, i= 0; 
-   char letra[1], candidata[1024] = ""; 
-   // Nos servimos de la estructura timeval de sys/time.h para guardar los tiempos del principio y fin de ejecución: 
-   struct timeval ti, tf; 
-   
-   // Tomamos el tiempo antes de empezar las operaciones. 
-   gettimeofday (&ti, NULL); 
-   
-   // Abrimos fichero. 
-   descriptor = open(archivo, O_RDONLY); 
-   
-   // Comprobamos si el fichero se ha abierto correctamente. 
-   if (descriptor == -1) { 
-      printf("\n-> Error al abrir [%s]", archivo); 
-      return (0); 
-      } 
-   else 
-      printf("\n-> [%s] abierto correctamente.", archivo); 
-   
-   // Empezamos a leer el fichero: 
-   valor_lectura = read (descriptor, (char *)letra, 1); 
-   
-   // Comprobamos si ha leído correctamente. Si es así, seguimos leyendo. 
-   if (valor_lectura == -1) 
-      printf("\n-> Error al leer [%s]\n", archivo); 
-   else { 
-      printf("\n-> Lectura de [%s] correcta.\n", archivo); 
-          while (valor_lectura > 0) { // Mientras no se acabe el fichero... 
-      while (letra[0] != '\n') { // Mientras la letra leída no sea un salto de línea... 
-            // Concatenamos lo que llevamos leído de la línea con la nueva letra leída. 
-             //i ++; 
-       sprintf (candidata, "%s%s", candidata, letra); 
-       valor_lectura = read (descriptor, (char *)letra, 1); 
-     } 
-       printf("%s\n", candidata); 
-            // Comprobamos si la línea candidata que llevamos leída contiene la cadena buscada, y también si ya lo hemos comprobado con esa misma línea. 
-            //candidata[i+1] = '\0'; 
-       if ((strstr(candidata, cadena) != NULL) && (linea != linea_vista)) { 
-         interruptor = 1; 
-         printf("Lalalalalalallal\n"); 
-         printf("\n[%s] está en la línea %d", cadena, linea); 
-         linea_vista = linea; 
-       } 
-            // Seguimos leyendo el fichero. 
-           // valor_lectura = read (descriptor, (char *)letra, 1); 
-            //} 
-     //i = 0; 
-     linea ++; 
-     valor_lectura = read (descriptor, (char *)letra, 1); 
-     // Iniciamos a nada el valor de la línea candidata en la que después buscaremos la cadena. 
-     candidata[0] = '\0'; 
-     } 
-   // En caso de que no se haya encontrado ninguna vez la cadena: 
-   if (interruptor == 0) 
-   printf("\nNo se ha encontrado la palabra buscada en el archivo %s\n", archivo); 
-   } 
-   // Cerramos el fichero y comprobamos si se ha hecho correctamente. 
-   close(descriptor); 
-    if (descriptor==-1) { 
-      printf("\n\n-> ERROR. [%s] no se ha cerrado correctamente\n",archivo); 
-      return (0); 
-      } 
-   else  
-      printf("\n\n-> [%s] cerrado correctamente\n",archivo); 
-   
-   // Volvemos a tomar el tiempo después de las operaciones y devolvemos un valor de la función igual a la diferencia entre el tiempo inicial y el final (en microsegundos). 
-   gettimeofday (&tf, NULL); 
-   return ((tf.tv_sec * 1000000 + tf.tv_usec) - (ti.tv_sec * 1000000 + ti.tv_usec)); 
- } 
-