una texto terceros protegido pegarlo pegar manera imagen cómo correcta copiar contenidos como archivo c file-io copy

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);