Desidero riscrivere il comando "cp" di Linux. Quindi questo programma funzionerà come #./a.out originalfile copiedfile
. Posso aprire il file, creare un nuovo file ma non posso scrivere il nuovo file. Niente è scritto. Quale potrebbe essere la ragione?Come scrivere un file con C in Linux?
Il codice C corrente è:
#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);
}
Variabile non utilizzata fd2; non dimenticare di controllare che la scrittura scriva tutto ciò che ti aspettavi; non usare assegnazioni come condizioni (usa GCC -Wall); è ancora meglio restituire un valore da main() sebbene C99 (erroneamente) permetta di lasciare il return off main(). Il tuo messaggio di errore per fd1 non è corretto; non esci quando fallisce su fd1. È possibile utilizzare sizeof (buffer) nella lettura anziché 50, che è la metà della dimensione del buffer. Gli errori sono scritti in modo classico su stderr, non su stdout. Il tuo loop si imbatte in problemi se la lettura fallisce (valore negativo) anziché restituire nulla. –
Ho appena copiato e incollato il codice sulla mia macchina, compilato con gcc e funziona perfettamente. – Dipstick
Oh, è successo qualcosa di miracoloso.A causa del tuo commento, ho provato a spostare il file in un altro posto e a testarlo di nuovo. Funziona!!! Grazie mille. – Devyn