kiwiw3 2013-10-01 02:32 采纳率: 0%
浏览 1215

C语言,怎样实现获取调用其他程序的输入输出?

各位,我的目的是获取调用其他程序hello.exe输出的信息。网上查找一下代码,但是实现不了!!

为什么呢?

我选择用LCC-win32为编译器。

#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <windows.h>


int main(int argc,char *argv[])
{
SECURITY_ATTRIBUTES sa;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor=NULL;
sa.bInheritHandle=TRUE;


HANDLE outHandle; 
outHandle = CreateFile("aa.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,&sa,CREATE_ALWAYS,0,NULL); 


PROCESS_INFORMATION processInfo;
    STARTUPINFO startUpInfo;


memset(&startUpInfo, 0, sizeof(STARTUPINFO));
memset(&processInfo ,0, sizeof(PROCESS_INFORMATION));


startUpInfo.cb = sizeof(STARTUPINFO);
    startUpInfo.dwFlags = STARTF_USESTDHANDLES;
startUpInfo.wShowWindow=SW_SHOWNORMAL;

    startUpInfo.hStdOutput = outHandle;


if(!CreateProcess("hello.exe",NULL, NULL, NULL, FALSE,
        CREATE_NEW_CONSOLE, NULL, NULL,
        &startUpInfo, &processInfo)){

CloseHandle(outHandle);
printf("open hello.exe error");

}else{

DWORD filesize=1000;
char * buffer = malloc(filesize + 1);
memset(buffer, 0, filesize+1);
DWORD readsize;
ReadFile(outHandle,buffer,filesize,&readsize,NULL);
printf("%s\n",buffer);
free(buffer); 


WaitForSingleObject(processInfo.hProcess,INFINITE);
printf("open hello.exe ok");


CloseHandle(outHandle); 


CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);

}


return 0;
}
  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 18:55
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog