碎管道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,在这种情况下它可以正常工作并继续写入字符。
我试图减小写操作的输入线的大小...我试图停止输入线程,以便有可能管道破裂,因为它们已满并且尚未读取数据。但是什么都行不通
请帮忙一下。
谢谢
没有找到相关结果
已邀请:
2 个回复
蜂佬渺
闪脖