在Windows下的Java应用程序中编写C控制台应用程序
发布时间:2020-09-16 10:09:39 所属栏目:Windows 来源:互联网
导读:如何在 Windows下将字符串数据从 Java发送到C控制台应用程序?我想这样做: BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));String o = ...;proc.getOutputStream().write(o.getBytes()); 但是当我这样做时,
|
如何在 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应用程序 我的Java应用程序似乎正在运行,但C应用程序从未在STDIN上接收任何数据. 这是C应用程序: int main()
{
ofstream f("c:temphacks.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,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:devhacksx64debughacks.exe");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
int a = 0;
while(a < 5)
{
String o = (a == 4 ? "Qn" : "An");
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,ex);
}
}
Java端似乎工作正常,但我没有收到C端的字符串. 我在这里做错了吗?如何在Windows下将字符串数据从Java发送到C控制台应用程序? 写完5个字符串后,为什么不刷新Java端的输出流?proc.getOutputStream().flush(); (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何使Windows Forms .NET应用程序显示为托盘图标?
- 如何从Windows内核调用usermode?
- windows – 带双引号参数的exec
- windows – 如何隐藏批量输出
- Win2008 r2 IIS7.5制定目录禁止执行脚本的方法
- api-ms-win-crt-runtime-|1-1-0.dll丢失的解决方法
- windows平台xFsRedir程序更新(虚拟磁盘镜像存储方式改进和
- Windows Phone 8和Android可以通过Wifi Direct连接吗?
- ms-office – Microsoft Office 2010功能区自定义UI中的Pha
- winapi – 我可以从DLL中删除数字签名吗?
推荐文章
站长推荐
- Windows Phone 8和Android可以通过Wifi Direct连
- windows – sysopen权限被拒绝
- Windows Phone – 在Windows Phone 8中设置广告
- winapi – 我可以从DLL中删除数字签名吗?
- 在windows平台下采用electron-packager打包elect
- windows – procdump -t – 如何在进程终止时转储
- 在WIN32中的“BUTTON”类窗口上显示位图
- .net – 为什么我无法在2.0.0.0播放器框架中重用
- 如何在Windows Phone 7系列上获取屏幕尺寸?
- windows – 如何为Git-Bash设置16种终端颜色?
热点阅读
