在Windows下的Java应用程序中编写C控制台应用程序
发布时间:2020-09-16 09:47:51 所属栏目: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修改PowerShell(命令提示符)默认中文编码方式
- 在Windows UWP应用程序中使用Python和C#
- 有没有办法在Windows cli中使用’COPY’命令(PostgreSQL)?
- 如何将windows-1250 / Cp1250中编码的String转换为utf-8?
- windows – 为什么没有64位版本的VS2013?
- Windows 10 下彻底关闭 Hyper-V 服务
- Microsoft Windows远程桌面协议中间人攻击漏洞(CVE-2005-17
- WIN10家庭中文版远程提示要求的函数不支持 win10家庭版提示
- npm ERR!注册表错误解析json – 尝试在Windows 8中安装Cor
- 在Windows上连接到GitHub时出现问题,甚至是通过PuTTY连接
推荐文章
站长推荐
- Qt 5 QML应用程序,包含许多Windows或复杂的UI
- SFG_Window
- winforms – 在单元测试方法中显示Windows窗体
- windows – CFileDialog :: OnInitDialog()不调用
- 在windows平台下采用electron-packager打包elect
- WIN10家庭中文版远程提示要求的函数不支持 win10
- Microsoft Unit Testing Framework for C++
- 为什么WPF在不同版本的Windows上呈现不同?
- Windows – LogonUser – 来自系统服务的CreateP
- Windows Filtering Platform用户模式或内核模式?
热点阅读