java 显示c控制台程序窗口_在Windows下的Java应用程序中编写C控制台应用程序

如何在

Windows下将字符串数据从

Java发送到C控制台应用程序?我想这样做:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));

String o = ...;

proc.getOutputStream().write(o.getBytes());

但是当我这样做时,我从未在C方面看到它:

ReadFile(stdin_h,buf, sizeof(buf), &bytes, 0)

ReadFile永远不会返回.

以下是进一步的详细说明和示例代码.

我编写了一个简单的C控制台(Win32)应用程序,它从STDIN读取并根据输入执行操作.

现在我想编写一个Java应用程序来“驱动”C应用程序. Java应用程序应该:

>使用Runtime.exec()启动C应用程序

>将字符串数据写入C应用程序的STDIN

>重复直到死亡的时候.

我的Java应用程序似乎正在运行,但C应用程序从未在STDIN上接收任何数据.

这是C应用程序:

int main()

{

ofstream f("c:\\temp\\hacks.txt");

HANDLE stdin_h = GetStdHandle(STD_INPUT_HANDLE);

DWORD file_type = GetFileType(stdin_h);

if( file_type != FILE_TYPE_CHAR )

return 42;

f << "Pipe" << endl;

for( bool cont = true; cont; )

{

char buf[64*1024] = {};

DWORD bytes = 0;

if( ReadFile(stdin_h,buf, sizeof(buf), &bytes, 0) )

{

string in(buf,bytes);

cout << "Got " << in.length() << " bytes: '" << in << "'" << endl;

f << "Got " << in.length() << " bytes: '" << in << "'" << endl;

if( in.find('Q') )

cont = false;

}

else

{

cout << "Err " << GetLastError() << " while reading file" << endl;

f << "Err " << GetLastError() << " while reading file" << endl;

}

}

}

这是Java方面:

public static void main(String[] args) {

Runtime rt =Runtime.getRuntime();

try {

Process proc = rt.exec("c:\\dev\\hacks\\x64\\debug\\hacks.exe");

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));

int a = 0;

while(a < 5)

{

String o = (a == 4 ? "Q\n" : "A\n");

proc.getOutputStream().write(o.getBytes());

System.out.println("Wrote '" + o + "'");

++a;

}

try {

proc.waitFor();

// TODO code application logic here

} catch (InterruptedException ex) {

Logger.getLogger(Java_hacks.class.getName()).log(Level.SEVERE, null, ex);

}

} catch (IOException ex) {

Logger.getLogger(Java_hacks.class.getName()).log(Level.SEVERE, null, ex);

}

}

Java端似乎工作正常,但我没有收到C端的字符串.

我在这里做错了吗?如何在Windows下将字符串数据从Java发送到C控制台应用程序?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值