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

Jacques Jean -  
 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);
}
Configuration: Windows 7
Firefox 3.5.6

3 réponses

  1. loupius Messages postés 789 Statut Membre 148
     
    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
    1. Jacques Jean
       
      Ok ! C'est vrai que c'est logique, merci pour cette bonne explication !
      Bonne soirée.
      0
  2. alphon5o
     
    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
  3. DARsKater Messages postés 873 Statut Membre 235
     
    Ctrl C + Ctrl V
    0
    1. alphon5o
       
      vraiment ? ten es sure de toi?
      0