Quiero volver a escribir el comando "cp" de Linux. Entonces, este programa funcionará como #./a.out originalfile copiedfile
. Puedo abrir el archivo, crear un nuevo archivo pero no puedo escribir el nuevo archivo. Nada está escrito. ¿Cuál podría ser la razón?¿Cómo escribir un archivo con C en Linux?
El código C actual es:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char *aa[]){
int fd,fd1;
char buffer[100];
if(argc!=3){
printf("Usage : ./a.out <original> <copy> \n");
return -1;
}
fd=open(aa[1],O_RDONLY,S_IRUSR);
if(fd==-1){
printf("file not found.\n");
return -1;
}
fd1=open(aa[2],O_CREAT | O_WRONLY,S_IRUSR);
if(fd1!=-1){
printf("file is created.\n");
}
ssize_t n;
while(n=read(fd,buffer,50)){
write(fd1,buffer,n);
printf("..writing..\n");
}
close(fd);
close(fd1);
}
Variable no utilizada fd2; no olvides comprobar que escribir escribe todo lo que esperabas; no use asignaciones como condiciones (use GCC -Wall); aún es mejor devolver un valor desde main() aunque C99 (erróneamente) le permite dejar el retorno de main(). Su mensaje de error para fd1 es incorrecto; no sale cuando falla en fd1. Puede usar sizeof (buffer) en la lectura en lugar de 50, que es la mitad del tamaño de su buffer. Los errores se escriben clásicamente en stderr, no en stdout. Su ciclo se encuentra con problemas si la lectura falla (valor negativo) en lugar de no devolver nada. –
Acabo de copiar y pegar el código en mi máquina, compilado con gcc y funciona bien. – Dipstick
Oh, algo milagro sucedió.Debido a su comentario, intenté mover el archivo a otro lugar y volví a probarlo. ¡¡¡Funciona!!! Muchas gracias. – Devyn