Ich möchte den "cp" Befehl von Linux umschreiben. Also wird dieses Programm wie #./a.out originalfile copiedfile
funktionieren. Ich kann die Datei öffnen, neue Datei erstellen, aber kann die neue Datei nicht schreiben. Nichts ist geschrieben. Was könnte der Grund sein?Wie schreibe ich eine Datei mit C in Linux?
Der aktuelle C-Code ist:
#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);
}
Unbenutzte Variable fd2; Vergessen Sie nicht zu überprüfen, dass write alles schreibt, was Sie erwartet haben; Verwenden Sie keine Zuweisungen als Bedingungen (verwenden Sie GCC - Wall); es ist immer noch besser, einen Wert von main() zurückzugeben, obwohl C99 (irrtümlicherweise) Ihnen erlaubt, den Rückgabewert main() zu verlassen. Ihre Fehlermeldung für FD1 ist falsch; Sie beenden nicht, wenn es auf FD1 fehlschlägt. Sie könnten sizeof (buffer) anstelle von 50 verwenden, was halb so groß ist wie der Puffer. Fehler werden klassisch in stderr geschrieben, nicht in stdout. Ihre Schleife führt zu Problemen, wenn das Lesen fehlschlägt (negativer Wert), im Gegensatz zur Rückgabe von nichts. –
Sie haben Ihren Code einfach auf meinen Rechner kopiert und eingefügt, mit gcc kompiliert und es funktioniert einwandfrei. – Dipstick
Oh, etwas Wunder ist passiert.Aufgrund deines Kommentars habe ich versucht, die Datei an einen anderen Ort zu verschieben und erneut zu testen. Es klappt!!! Ich danke dir sehr. – Devyn