Innanzitutto mi scuso immediatamente per la mia postata errata contro il regolamento.
Nel mio programma completo la funzione createprocess viene utilizzata. Non capisco perchè mi venga restituito il valore 0.
Ecco il mio codice:
codice:
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <windows.h>
#define MAX 50
using namespace std;
char nome_cognome[MAX];
void nuovoprofilo();
int main()
{
char ch;
cout << "Nuovo (n), Salvare (s) Lanciare (r) Uscire (q)" << endl;
cin >> ch;
while (ch!='q')
{
switch (ch)
{
case 'n':
nuovoprofilo();
break;
case 's':
//salvaprofilo();
break;
case 'r':
//lanciaprofilo();
break;
default : cout << "Nuovo (n), Salvare (s) Lanciare (r) Uscire (q)" << endl;
}
cin >> ch;
}
return 0;
}
void nuovoprofilo()
{
cout << "Inserire nome e cognome" << endl;
cin.getline(nome_cognome,MAX); //perchè non funziona?!
cin.getline(nome_cognome,MAX);
system("\"mkdir C:\\cygwin\\home\\Ciucci\\voxforge_2\"");
system("\"mkdir C:\\cygwin\\home\\Ciucci\\voxforge_2\\HTK_Scripts\"");
system("\"xcopy C:\\cygwin\\home\\Ciucci\\voxforge\\HTK_Scripts C:\\cygwin\\home\\Ciucci\\voxforge_2\\HTK_Scripts\"");
system("\"mkdir C:\\cygwin\\home\\Ciucci\\voxforge_2\\auto\"");
ofstream fout ("C:\\cygwin\\home\\Ciucci\\voxforge_2\\auto\\sample.grammar");
fout << "S : NS_B COMANDO OGGETTO NS_E" << endl << "S : NS_B RICHIESTA NS_E" << endl;
fout.close();
ofstream fout2 ("C:\\cygwin\\home\\Ciucci\\voxforge_2\\auto\\sample.voca");
fout2 << "% NS_B" << endl << "<s> sil" << endl << endl << "% NS_E" << endl << "</s> sil" << endl << endl << "% COMANDO" << endl << "ACCENDI a cc e n d i" << endl << "SPEGNI s p e ggn i" << endl << endl << "% OGGETTO" << endl << "LUCE l u c e" << endl << "TEIERA t e j e r a" << endl << endl << "% RICHIESTA" << endl << "AIUTO a j u t o" << endl;
fout2.close();
BOOL esito;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si)); // serve per azzerrare la struttura si
si.cb = sizeof(si); // il campo cb deve essere valorizzato alla dimensione
// della struttura
si.lpTitle = "Processo figlio Cygwin.bat";
// crea il processo figlio, ovvero lancia cygwin
esito = CreateProcess
(
NULL, // nome dell'eseguibile (viene usata la riga di comando)
"C:\\cygwin\\Cygwin.bat", // percorso del programma che voglio eseguire
NULL, // indica che il processo non è ereditabile dai processi figli
NULL, // indica che il thread associato al processo non è ereditabile
FALSE, // i diritti ereditati dal processo non passano ai figli
CREATE_NEW_CONSOLE + NORMAL_PRIORITY_CLASS, // opzioni di creazione
// (0 per nessuna); in questo caso imposto priorità e creazione
// del processo figlio in una nuova finestra console
NULL, // puntatore ad un blocco di variabili d’ambiente.
// in questo caso vengono usate quelle del padre.
NULL, // directory di lavoro per il processo figlio.
// In questo caso viene usata la directory corrente del processo padre
&si, // puntatore ad una struttura STARTUPINFO
&pi // puntatore ad una struttura PROCESS_INFORMATION
);
if (esito == TRUE)
{
cout<<"Processo creato regolarmente"<<endl;
}
else
{
cout<<"CreateProcess fallito!"<<endl;
}
//Da controllare
PROCESS_INFORMATION x;
PROCESS_INFORMATION*p;
p=&x;
(*p).dwProcessId;
cout << "Il PID di cygwin è " << (*p).dwProcessId; //dovrebbe restituirmi il pid della console cygwin
DWORD WINAPI GetCurrentProcessId(void);
//cout << "Il pid del mio file tesi.exe è " << GetCurrentProcessId(void); //mi dovrebbe restituire il PID del processo chiamante
}
Un saluto ringraziandoti per la disponibilità immensa
P.S. Utilizzo il C++ perchè sono obbligato.