1. 程式人生 > >重定向子程序輸出到檔案

重定向子程序輸出到檔案

CString elfname;
	CString cmdline;
	CString outfile;
	STARTUPINFO   startupinfo; 
	HANDLE   houtputfile; 
	char buffer[100];
	PROCESS_INFORMATION   pinfo; 
	CDebugTombstoneDlg * pthis = (CDebugTombstoneDlg *) lpParameter;
	int itemID = pthis->m_linenum;
	pthis->m_list.GetItemText(itemID, 1, buffer, 100);
	elfname.Insert(0, buffer);
	cmdline += "arm-linux-androideabi-objdump.exe -C -D -S ";
	elfname.Replace("/","\\");
	cmdline += pthis->m_sympath;
	cmdline += elfname;
	startupinfo.cb=sizeof(STARTUPINFO); 
	GetStartupInfo(&startupinfo); 
	startupinfo.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; 
	startupinfo.wShowWindow=SW_HIDE; 
	SECURITY_ATTRIBUTES psa={sizeof(psa),NULL,TRUE};;
	psa.bInheritHandle=TRUE;
	outfile += pthis->m_sympath;
	outfile += "\\";
	outfile += "output";
	outfile += itemID + 48;
	outfile += ".txt";
	houtputfile = CreateFile((LPSTR)(LPCTSTR)outfile, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &psa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	startupinfo.hStdOutput = houtputfile;
	startupinfo.hStdInput = houtputfile;
	startupinfo.hStdError = houtputfile;
	if(houtputfile == INVALID_HANDLE_VALUE){ 
		AfxMessageBox("Create file Error!"); 
		return GetLastError(); 
	} 
	if(!CreateProcess(NULL, (LPSTR)(LPCTSTR)cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &startupinfo, &pinfo)) 
	{
		return GetLastError();
		
	}
	WaitForSingleObject(pinfo.hProcess, 120 * 1000);
	TerminateProcess(pinfo.hProcess, 1);
	CloseHandle(houtputfile);
	return 0;