(C) Copier un fichier a la suite d'un autre

Fermé
Jacques Jean - 22 déc. 2009 à 23:36
 alphon5o - 23 déc. 2009 à 01:19
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);
}
A voir également:

3 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 déc. 2009 à 00:07
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.
1
Jacques Jean
23 déc. 2009 à 00:35
Ok ! C'est vrai que c'est logique, merci pour cette bonne explication !
Bonne soirée.
0
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;
}

0
DARsKater Messages postés 749 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 août 2020 233
23 déc. 2009 à 01:12
Ctrl C + Ctrl V
0
vraiment ? ten es sure de toi?
0