Есть программа prog1.exe, которая запускает программу prog2.exe (консольное приложение). Программа prog2 написана на C++. Будем считать для простоты, что программа prog1 тоже написана на C++. Тогда программа prog1 вызывает программу prog2, например, следующим образом:
#include "stdafx.h"
#include "windows.h"
void main()
{
STARTUPINFO cif;
ZeroMemory(&cif,sizeof(STARTUPINFO));
PROCESS_INFORMATION pi;
if (CreateProcess("c:\\windows\\notepad.exe",NULL,NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==TRUE)
{
// действия;
Sleep(1000); // подождать
TerminateProcess(pi.hProcess,NO_ERROR); // убрать процесс
}
}
(Можно запустить и другими способами--через WinExec или через ShellExecute).
Программы prog1 и prog2 обмениваются данными через текстовые файлы.
Вопрос: как в программе prog2 отследить то, что она прерывается и обработать это прерывание? Как записать данные из программы prog2 в текстовой файл, чтобы запись прошла успешно при прерывании?
В базах данных есть такое понятие, как транзакция. Это когда группа команд объединяется в единое целое. Если все команды в этой группе прошли успешно, то происходит commit (подтверждение), а если хотя-бы одна команда не выполнилась, то происходит rollback (откат).
В моём случае не используются базы данных. Можно ли, тем не менее, несколько команд записи в файл в программе prog2 объединить в одну группу, чтобы либо все эти команды были выполнены, либо ни одна из них не была выполнена?