Devi usare le librerie <sys/dir> e <stdio.h>. l'API
scandir(char *dirname, struct direct **namelist, int (*select)(), int (*compar)())
per ottenere la lista dei puntatori dei file della directory. Successivamente per copiare ed incollare i singoli file io farei una funzione :
int myReadWrite(char * nameFile, char * dirOrigine, char * dirDest);
che crea il file nella directory di destinazione, legge il file dalla directory di origine ed infine scrive (quello letto) nel file nella directory di destinazione. Per leggere e scrivere puoi usare le api :
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
e magari anche:
off_t lseek(int fd, off_t offset, int whence);
ti posizioni alla fine del file così leggi e scrivi tutto il file senza scandirlo carattere per carattere. (sempre che i file che copi sono di dimensioni limitate)
Potresti anche eseguire un comando shell nel tuo programma c tipo:
system("cp DIR_O/*.* DIR_D");
http://digilander.libero.it/uzappi/C/librerie/funzioni/read.html
http://digilander.libero.it/uzappi/C/librerie/funzioni/write.html
http://digilander.libero.it/uzappi/C/librerie/funzioni/lseek.html