亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在線求助,關于C語言中CreatProcess函數參數問題!急!

在線求助,關于C語言中CreatProcess函數參數問題!急!

拉風的咖菲貓 2021-08-04 10:07:43
我想用CreatProcess函數調用C盤目錄下的test.exe程序,同時需要將test.exe的標準輸入輸出重定向到文件輸入輸出(輸入重定向到in.txt,輸出重定向到b.txt)。請問CreatProcess的前兩個參數如何確定?第一個參數似乎是“C://test.exe”,第二個命令行參數應該怎么寫?
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

其實system函數執行之后,就會返回到你的程序了,這個函數是阻塞的。還有更靈活一些的,比如ShellExecuteEx,這個應該是非阻塞的,但是可以通過WaitForSingleObject使他變為阻塞。如果windows程序,也可以用CreatProcess()

那你看看是否可以使用exec和spawn兩個函數族的函數。
system中的exe加載過程是由os完成的,system只不過把一條命令行傳給了os,由os完成剩下的工作。
而exec和spawn是調用dos內核的4Bh功能自己加載一個子程序的,因此能夠比較細致地控制加載的過程。MCB申請由4B功能完成,子程序的PSP重構以及JFT的繼承由exec和spawn幫你做,而EVB塊的內容可以通過它們提供的參數讓用戶指定。spawn好象還可以通過4Dh獲得子程序的返回值(就是main的return值),是不是這樣不太記得了。

如果是在windows下編程,建議還是用VC吧,比較有用。

查看完整回答
反對 回復 2021-08-09
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

第一個參數是應用程序路徑
第二個是應用程序執行命令

如果只調用不帶參數的exe應用程序的情況下,第一個參數和第二個參數效果是一樣的

舉個例子:
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
PROCESS_INFORMATION pi;
STARTUPINFO si = {sizeof(si)}; // 填充數組
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); // 等待進程結束
}
else
printf("進程啟動失敗!\n");
return 0;
}



查看完整回答
反對 回復 2021-08-09
  • 3 回答
  • 0 關注
  • 391 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號