waitpid, похоже, не ждет

У меня есть простая функция — ее цель — скопировать файл в .old перед его перезаписью. Потому что я ленивый (и ответ на этот вопрос предложил это), я использую cp для выполнения работы.

Затем я вызываю waitpid и проверяю коды возврата.

Код, вызывающий это, вызывает мою функцию копирования, а затем сразу открывает файл для чтения. Каким-то образом код вызова запускается перед вызовом cp — новый файл — это то, что копируется.
Лучший пример — если не существует ни файла, ни резервной копии. Оба созданы и содержат то, что я сохранил.

Я изо всех сил, чтобы увидеть, где я ошибся, помощь будет принята.

copy_old();
std::ofstream savefile (SETTINGS_LOCATION);
if (savefile.is_open())
{
savefile << ...void settings::copy_old()
{
int childExitStatus;
pid_t pid;

pid = fork();

if (pid == 0) { /* child */
execl("/bin/cp", "/bin/cp", "-f", SETTINGS_LOCATION, SETTINGS_LOCATION_B, (char *)0);
}
else if (pid < 0) {
ERR("Could not Backup Previous Settings");
}
else {
pid_t ws = waitpid( pid, &childExitStatus, WNOHANG);
if (ws == -1)
{
ERR("Could not Backup Previous Settings1");
}

if( !WIFEXITED(childExitStatus) || WEXITSTATUS(childExitStatus)) /* exit code in childExitStatus */
{
ERR("Settings backup may have been unsuccessful");
}
}
}

0

Решение

Конечно waitpid не ждет Вы сказали это не:

pid_t ws = waitpid( pid, &childExitStatus, WNOHANG);

WNOHANG означает «не жди». Измени это WNOHANG до 0, если хотите waitpid ждать.

2

Другие решения

Других решений пока нет …