簡単な関数があります。その目的は、ファイルを上書きする前に .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");
}
}
}