为了账号安全,请及时绑定邮箱和手机立即绑定

在线求助,关于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 关注
  • 340 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信