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#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]=='-'){
espacios
= atoi(argv
[0])<21? atoi(argv
[0]) : 20; 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){
perror("Error, no se ha podido abrir el archivo"); exit(1);} printf ("\n======%s=======%d,%c\n", argv
[0], espacios
, tipo
); 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 (isalpha(ruta
[k
]) && tipo
!='0'){ 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.