运行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