(C) Copier un fichier a la suite d'un autre
Jacques Jean
-
alphon5o -
alphon5o -
Bonjour,
Je souhaites copier une fichier a la suite d'un autre, seulement je ne sais pas comment incrementer mon write, voila comment je pensais faire mais j'ai un message d'erreur sur 'buffer2++', merci de me donner un petit coup de main !
#include <unistd.h>
#include <fcntl.h>
#define BUF_SIZE 1024
int main(int ac, char **av)
{
int i;
int fd;
int fd2;
int nb_read;
int nb_read2;
char buffer2[BUF_SIZE];
char buffer[BUF_SIZE];
fd2 = open("toto2.txt", O_RDONLY);
nb_read2 = read(fd2, buffer2, BUF_SIZE);
fd = open("toto.txt", O_RDWR | O_APPEND);
i = 0;
while (buffer2[i])
{
write(fd, buffer2, sizeof(*buffer2));
buffer2++;
i++;
}
close(fd2);
close(fd);
}
Je souhaites copier une fichier a la suite d'un autre, seulement je ne sais pas comment incrementer mon write, voila comment je pensais faire mais j'ai un message d'erreur sur 'buffer2++', merci de me donner un petit coup de main !
#include <unistd.h>
#include <fcntl.h>
#define BUF_SIZE 1024
int main(int ac, char **av)
{
int i;
int fd;
int fd2;
int nb_read;
int nb_read2;
char buffer2[BUF_SIZE];
char buffer[BUF_SIZE];
fd2 = open("toto2.txt", O_RDONLY);
nb_read2 = read(fd2, buffer2, BUF_SIZE);
fd = open("toto.txt", O_RDWR | O_APPEND);
i = 0;
while (buffer2[i])
{
write(fd, buffer2, sizeof(*buffer2));
buffer2++;
i++;
}
close(fd2);
close(fd);
}
A voir également:
- (C) Copier un fichier a la suite d'un autre
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Forcer la suppression d'un fichier - Guide
- Fichier rar - Guide
3 réponses
Ah les pointeurs et les tableaux !
Pourquoi 'buffer2++' n'a aucun sens ?
'buffer2' est un nom de tableau et ne peut donc être modifié L'adresse d'un tableau est une constante.
Par contre si on déclare une variable 'char* p', on peut parfaitement écrire 'p = buffer2' puis plus loin 'p++'.
Bonne réflexion.
Pourquoi 'buffer2++' n'a aucun sens ?
'buffer2' est un nom de tableau et ne peut donc être modifié L'adresse d'un tableau est une constante.
Par contre si on déclare une variable 'char* p', on peut parfaitement écrire 'p = buffer2' puis plus loin 'p++'.
Bonne réflexion.
sinon plus proprement essaye ce code.
/* gcc -Wall -std=c99 -Werror -g -o concatfile test.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#define erreur(x) do { \
fprintf(stderr, "Erreur fatale %s/%s()/l.%d - ", __FILE__, __func__, __LINE__); \
perror(x); \
exit(EXIT_FAILURE); \
} while (0)
void usage(char *string){
fprintf(stderr,"usage: %s src dest\n", string);
exit(EXIT_FAILURE);
}
int main(int argc, char** argv)
{
if(argc != 3 )
usage(argv[0]);
int d1, d2;
if((d1 = open(argv[1], O_RDONLY,S_IRWXU)) == -1 )
erreur("open");
if((d2 = open(argv[2], O_WRONLY | O_APPEND, S_IRWXU)) == -1 )
erreur("open");
char c;
int nblu;
while((nblu = read(d1, &c, 1)) == 1) {
if( write(d2, &c, nblu) == -1 )
erreur("write");
}
if(nblu == -1 )
erreur("read");
return EXIT_SUCCESS;
}
Bonne soirée.