So, die unelegante Lösung funktioniert ...
Wenn man das waitpid rausnimmt laufen die cp's asynchron
Code:
void fork_exec_cp_r( string cp_from, string cp_to )
{
pid_t pid;
switch( pid=fork() ) {
case -1:
cerr << "Fehler bei fork()" << endl;
exit(1);
break;
case 0:
execl("/bin/cp", "cp", "--no-dereference", "--preserve=mode,timestamps", "-r", cp_from.c_str(), cp_to.c_str(), NULL );
cerr << "Fehler bei execl" << endl;
exit(1);
break;
default:
waitpid(pid,NULL,0);
break;
}
}
edit: der Aufruf von cp sieht besser so aus:
Code:
execl("/bin/cp", "cp", "--no-dereference", "--preserve=mode,timestamps", "-r", "--", cp_from.c_str(), cp_to.c_str(), NULL );
Dann klappts auch mit Dateinamen wie "--link" (werden nicht mehr als Option interpretiert)
Lesezeichen