碎管道Java程序在外部C程序stdin中写入,并从stdout中读取

|| 我正在使用下面的Java代码写入基本上从stdin读取的C程序的stdin中,将A_A_A添加到该行的末尾,并将其写回到stdout中,该javad程序从该stdout中抛出该异常并抛出该stdout
BufferedWriter b_stdout = new BufferedWriter(new OutputStreamWriter(fuse.process.getOutputStream()));
        String strLine;
        BufferedReader br = new BufferedReader(new FileReader(\"/home/Desktop/data1024.dat\"));
               while ((strLine=br.readLine())!=null)
                    {

                      b_stdout.newLine();               
                      b_stdout.write(strLine);
                      b_stdout.flush();
}
data1024文件是一个大小为1 MB的文本文件。上面是一个用C程序编写的线程... 以下是C程序
main() {
int rc;
int df;
int i;
char buf[32768];
rc = fcntl(fileno(stdin), F_SETFL, O_NONBLOCK);
FILE *fp;
for (i=0;i<=10000000;i++) 
{
    int rc=-1;
    memset(buf,\'\\0\',32768);
    //rc = fread(buf,5, 1, stdin);
    rc = read(fileno(stdin),buf,32768); 
    if (rc > 0)
    {
        strcat(buf,\"B_B_B_B_B_B_B_B_B\");
        write(fileno(stdout),buf,strlen(buf));
        /*fp=fopen(\"wroteExeB\",\"a\");
        fprintf(fp,\"%s\",buf);
        fclose(fp);*/
        //printf(\"%s\",buf);
    }
}
另一个java线程从下面的C程序的stdout中读取
public void run(){
    try{
        String strLine;
        int c;
        BufferedReader bill_stdout = new BufferedReader(new InputStreamReader(fuse.process.getInputStream()));
        BufferedWriter new_write = new BufferedWriter(new FileWriter(\"/homeDesktop/data89.dat\"));

    while ((strLine = bill_stdout.readLine()) != null)   {
        new_write.newLine();
        new_write.write(strLine);

        System.out.println(\"output thread \"+strLine);
        new_write.flush();
                }
现在,当我运行程序时 我一直在面对Broken:Pipe错误 我可以在C程序中写一些行,因为在输入程序的标准输出中可以看到它们。 某些行是输出线程的输出的一部分,但是在几行如17或18之后在C程序中写入的输入线程给出以下错误
java.io.IOException: Broken pipe
可以帮上忙...我尝试使用FileWriter一次写入一个字符,而不使用BufferedWriter,在这种情况下它可以正常工作并继续写入字符。 我试图减小写操作的输入线的大小...我试图停止输入线程,以便有可能管道破裂,因为它们已满并且尚未读取数据。但是什么都行不通 请帮忙一下。 谢谢     
已邀请:
        我没有详细研究代码,但是C代码是否将stdin设置为非阻塞?难道不只是让C程序立即退出,导致在尝试写入时导致管道损坏?     
        \“ Broken pipe \”表示您已写入另一端已经关闭的管道。换句话说,您违反了您和接收方之间的应用程序协议。这不仅是缓冲,阻塞/非阻塞模式等问题,而且是设计错误。     

要回复问题请先登录注册