Aprire un file di testo ed eseguire un file exe sono due operazioni che non c'entrano niente. Inoltre lanciando un eseguibile con la system() ti complichi inutilmente la vita per poi "manovrare" il processo creato. Se, come mi sembra di capire, lavori su Windows, devi usare le API di Windows per creare e terminare processi (nello specifico ti servono la CreateProcess e la TerminateProcess).
codice:
#include <stdio.h>
#include <windows.h>
int main(void)
{
STARTUPINFO si={0};
PROCESS_INFORMATION pi={0};
puts("Avvio la calcolatrice...");
si.cb=sizeof(si);
if(!CreateProcess(NULL,"calc.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
puts("Impossibile creare il processo.");
return 1;
}
puts("Ora aspetto 10 secondi...");
Sleep(10000);
puts("OK, è ora di chiudere la calcolatrice.");
if(!TerminateProcess(pi.hProcess,0))
{
puts("Impossibile terminare il processo.");
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 2;
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
puts("Processo terminato.");
return 0;
}
Questo in realtà non è il modo più ortodosso di terminare un processo; per le applicazioni dotate di finestra di solito conviene inviare un messaggio WM_QUIT ad una finestra dell'applicazione.