加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Windows下的Java应用程序中编写C控制台应用程序

发布时间:2020-12-14 19:20:09 所属栏目:Java 来源:网络整理
导读:如何在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应用程序
>将字符串数据写入C应用程序的STDIN
>重复直到死亡的时候.

我的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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读