CreateProcess 输入输出重定向到文件

运行Demo.java,传a、b值,把输出来的计算结果写到TXT文件中。


Demo.java:

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        System.out.println(a + b);
    }
}

cpp:

#include <iostream>
#include <windows.h>
using namespace std;

int main(){

    SECURITY_ATTRIBUTES sa;
    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;
	
    HANDLE hInput = CreateFile("input.txt", GENERIC_READ, 0, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if( hInput == INVALID_HANDLE_VALUE ){
		cout<<"error: hInput"<<endl;
		return 0;
	}
	
	HANDLE hOutput = CreateFile("output.txt", GENERIC_WRITE, 0, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if( hOutput == INVALID_HANDLE_VALUE ){
		cout<<"error: hOutput"<<endl;
		return 0;
	}
	
	STARTUPINFO si = {0};
	PROCESS_INFORMATION pi = {0};
	si.cb              = sizeof(STARTUPINFOW);
    si.dwFlags         = STARTF_USESTDHANDLES;
    si.hStdInput       = hInput;
    si.hStdError       = hOutput;
    si.hStdOutput      = hOutput;
	
	if(CreateProcess(NULL, "java Demo", NULL, NULL, TRUE, CREATE_SUSPENDED, NULL, NULL, &si, &pi)){
		
		//唤醒线程
		ResumeThread(pi.hThread);
		WaitForSingleObject(pi.hProcess, INFINITE );
		
		CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
		CloseHandle(hInput);
		CloseHandle(hOutput);
	}
	else{
		cout<<"创建进程失败!"<<endl;
		HANDLE hProcess = GetCurrentProcess();
		TerminateProcess(hProcess,0);
	}

	return 0;
}

input.txt:

10 20


则运行后,output.txt:

30



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值