Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con lseek

Estas en el tema de Problema con lseek en el foro de C/C++ en Foros del Web. Buenas a todos! Estoy practicando para un examen de C de las llamadas al sistema en unix y me he atascado con lseek. Os dejo ...
  #1 (permalink)  
Antiguo 31/03/2010, 16:58
 
Fecha de Ingreso: diciembre-2005
Mensajes: 39
Antigüedad: 18 años, 4 meses
Puntos: 0
Problema con lseek

Buenas a todos!

Estoy practicando para un examen de C de las llamadas al sistema en unix y me he atascado con lseek. Os dejo mi programa, que dependiendo de las opciones que se indica como argumento, imprime el contenido de unos archivos indicados en mayúscula o minúscula. La sintaxis de la línea de órdenes será "formato [<-n>] [<-m>] [<-M>] <archivo1> <archivo2> … <último archivo>". Espero que alguien pueda echarme una mano y agradezco desde ya cualquier sugerencia en el código o si vosotros lo haríais de otra manera.

Código C:
Ver original
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <fcntl.h>  
  6. #include <sys/stat.h>
  7.  
  8.  
  9. void imprimirArchivo (int op, int espacios, char tipo);
  10. int main (int argc, char *argv[]){
  11.  
  12. int espacios =1;
  13. char tipo='0';
  14. int op;
  15. struct stat fatrib;
  16.  
  17. while (--argc>0){
  18.     if ((*++argv)[0]=='-'){
  19.         if (isdigit(*++argv[0]))
  20.             espacios= atoi(argv[0])<21? atoi(argv[0]) : 20;
  21.         else
  22.             if ((*argv[0]=='m' || *argv[0]=='M') && tipo=='0')
  23.                 tipo = *argv[0];
  24.     }
  25.     stat (argv[0], &fatrib);
  26.     if (S_ISREG (fatrib.st_mode)){
  27.         if((op = open (argv[0], O_RDONLY))==-1){
  28.             perror("Error, no se ha podido abrir el archivo"); exit(1);}
  29.         printf ("\n======%s=======%d,%c\n", argv[0], espacios, tipo);
  30.         imprimirArchivo (op, espacios, tipo);
  31.         close ( op);
  32.     }
  33. }
  34. return 0;
  35. }
  36.  
  37. void imprimirArchivo (int op, int espacios, char tipo){
  38.      char ruta  [1000];
  39.     char esps [20]=" ";
  40.     while (espacios-->1){
  41.         sprintf(esps, " %s", esps);
  42.     }
  43.  
  44.      int esp=1,j=0,k=0;
  45.     lseek(op,0,SEEK_SET);
  46.    
  47.     while (read(op, &ruta, sizeof(char)*10)>0){
  48.         for (k=0; k<10; k++){
  49.             if (ruta[k]==' ' && espacios !=1)
  50.                 if (ruta[k+1]!=' ')
  51.                     printf("%s",esps);
  52.             if (isalpha(ruta[k]) && tipo!='0'){
  53.                 if (tipo=='m')
  54.                     printf("%c", tolower(ruta[k]));
  55.                 if (tipo=='M')
  56.                     printf("%c", toupper(ruta[k]));
  57.             }else printf ("%c",  ruta[k]);
  58.         }
  59.         lseek(op,2*sizeof(char)*10,SEEK_CUR);
  60.     }  
  61.    
  62. }

Muchas gracias!

PD: El error sale al realizar la lectura, que se salta caracteres.

Última edición por dano88; 01/04/2010 a las 02:31
  #2 (permalink)  
Antiguo 01/04/2010, 11:01
 
Fecha de Ingreso: diciembre-2005
Mensajes: 39
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Problema con lseek

Vale, es una gilipollez. Read también avanza el puntero. Gracias de todas formas.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:16.