重定向子程序輸出到檔案
阿新 • • 發佈:2019-01-07
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;