Comment écrire un fichier avec C sous Linux?
Je veux réécrire le "cp" commande de Linux. Ainsi, ce programme fonctionne comme #./a.out originalfile copiedfile
. Je peux ouvrir le fichier, créer un nouveau fichier, mais ne peut pas écrire le nouveau fichier. Rien n'est écrit. Quelle pourrait être la raison?
L'actuel code C est:
#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);
}
source d'informationauteur Devyn
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de write() read() données dans le nouveau fichier:
Mise à jour: ajout de la bonne ouvre...
Btw, le O_CREAT peut être un OU logique (O_CREAT | O_WRONLY). Vous sont effectivement ouvrir un trop grand nombre de descripteurs de fichiers. Il suffit de ne l'ouvrir qu'une fois.
Tout d'abord, le code que vous avez écrit n'est pas portable, même si vous l'obtenir pour fonctionner. Pourquoi utiliser des OS des fonctions spécifiques lorsqu'il est parfaitement indépendant de la plate-moyen de le faire? Voici une version qui utilise un seul fichier d'en-tête et est portable sur n'importe quelle plateforme qui met en œuvre la bibliothèque C standard.
EDIT: Le la glibc de référence a ceci à dire:
Que vous avez à faire
write
dans la même boucle queread
.