texto - Copiar contenidos de un archivo a otro usando read(), write(), open()
copiar texto de pdf protegido (2)
Arreglé un programa rápido para simplemente tomar el contenido de un archivo y transponerlo a un archivo de salida. La primera vez que ejecuto mi programa no aparece ningún error y parece que todo va a funcionar bien. Sin embargo, cuando reviso mi archivo de salida no hay nada en el archivo. Lo primero que pensé fue que los permisos no eran correctos y que no se permitía escribir. Cuando creé manualmente un archivo .txt en el directorio y establecí los permisos y luego ejecuté el programa, pareció funcionar (ubuntu me está mostrando el contenido del archivo, la copia) pero no puedo abrir el archivo real. Espero que alguien con más experiencia que yo pueda ayudarme. Bueno, aquí está mi código:
int main(int argc, char* argv[]){
char buf[128];
int outft, inft,fileread;
// output file opened or created
if((outft = open(argv[1], O_CREAT | O_APPEND | O_RDWR))==-1){
perror("open");
}
// lets open the input file
inft = open(argv[2], O_RDONLY);
if(inft >0){ // there are things to read from the input
fileread = read(inft, buf, 160);
printf("%s/n", buf);
write(outft, buf, 160);
close(inft);
}
close(outft);
return 0;
}
Asegúrate de configurar los permisos del archivo también.
EJEMPLO:
if((outft = open(argv[1], O_CREAT | O_APPEND | O_RDWR, 0666))==-1){
perror("open");
}
Su búfer de datos tiene un tamaño de 128 bytes, pero está leyendo 160 bytes de datos en él. Esto significa que está escribiendo en la memoria fuera del búfer declarado.
Espero que las variables outft, inft, and fileread
probablemente sigan buf
en la memoria y se sobrescriban con basura durante la llamada a read()
. Es probable que la llamada a write()
falle porque está obteniendo un valor basura para que el descriptor de archivo escriba.
Para evitar el desbordamiento del búfer, sizeof
es tu amigo:
fileread = read(inft, buf, sizeof(buf));
...
write(outft, buf, fileread);