3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
其實(shí)system函數(shù)執(zhí)行之后,就會(huì)返回到你的程序了,這個(gè)函數(shù)是阻塞的。還有更靈活一些的,比如ShellExecuteEx,這個(gè)應(yīng)該是非阻塞的,但是可以通過(guò)WaitForSingleObject使他變?yōu)樽枞?。如果windows程序,也可以用CreatProcess()
那你看看是否可以使用exec和spawn兩個(gè)函數(shù)族的函數(shù)。
system中的exe加載過(guò)程是由os完成的,system只不過(guò)把一條命令行傳給了os,由os完成剩下的工作。
而exec和spawn是調(diào)用dos內(nèi)核的4Bh功能自己加載一個(gè)子程序的,因此能夠比較細(xì)致地控制加載的過(guò)程。MCB申請(qǐng)由4B功能完成,子程序的PSP重構(gòu)以及JFT的繼承由exec和spawn幫你做,而EVB塊的內(nèi)容可以通過(guò)它們提供的參數(shù)讓用戶指定。spawn好象還可以通過(guò)4Dh獲得子程序的返回值(就是main的return值),是不是這樣不太記得了。
如果是在windows下編程,建議還是用VC吧,比較有用。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
第一個(gè)參數(shù)是應(yīng)用程序路徑
第二個(gè)是應(yīng)用程序執(zhí)行命令
如果只調(diào)用不帶參數(shù)的exe應(yīng)用程序的情況下,第一個(gè)參數(shù)和第二個(gè)參數(shù)效果是一樣的
舉個(gè)例子:
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
PROCESS_INFORMATION pi;
STARTUPINFO si = {sizeof(si)}; // 填充數(shù)組
char buf[] = "C:\\test.exe"; // 記錄文件路徑
BOOL res = ::CreateProcess(NULL,buf,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
//或CreateProcess(buf,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
if(res)
{
::CloseHandle(pi.hThread);
::WaitForSingleObject(pi.hProcess,INFINITE); // 等待進(jìn)程結(jié)束
}
else
printf("進(jìn)程啟動(dòng)失敗!\n");
return 0;
}
- 3 回答
- 0 關(guān)注
- 407 瀏覽
添加回答
舉報(bào)