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
#include <string.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <fcntl.h> #include <sys/stat.h> void imprimirArchivo (int op, int espacios, char tipo); int main (int argc, char *argv[]){ int espacios =1; char tipo='0'; int op; struct stat fatrib; while (--argc>0){ if ((*++argv)[0]=='-'){ else if ((*argv[0]=='m' || *argv[0]=='M') && tipo=='0') tipo = *argv[0]; } stat (argv[0], &fatrib); if (S_ISREG (fatrib.st_mode)){ if((op = open (argv[0], O_RDONLY))==-1){ imprimirArchivo (op, espacios, tipo); close ( op); } } return 0; } void imprimirArchivo (int op, int espacios, char tipo){ char ruta [1000]; char esps [20]=" "; while (espacios-->1){ } int esp=1,j=0,k=0; lseek(op,0,SEEK_SET); while (read(op, &ruta, sizeof(char)*10)>0){ for (k=0; k<10; k++){ if (ruta[k]==' ' && espacios !=1) if (ruta[k+1]!=' ') if (tipo=='m') if (tipo=='M') } lseek(op,2*sizeof(char)*10,SEEK_CUR); } }
Muchas gracias!
PD: El error sale al realizar la lectura, que se salta caracteres.