我正在使用以下 java 代码写入 C 程序的标准输入,该程序基本上从标准输入读取,将 A_A_A 添加到行尾,并将其写回到 java 程序从中读取的标准输出中并抛出标准输出
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 程序的标准输出中读取
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 程序中写入一些行,因为我可以在输入程序的标准输出中看到它们。
有些行是输出线程输出的一部分,但是在 C 程序中编写的输入线程在 17 或 18 等几行之后给出以下错误
java.io.IOException: Broken pipe
有人可以帮忙吗...我尝试使用FileWriter一次写入一个字符,而不是使用BufferedWriter在这种情况下它可以工作并继续写入字符。
我试图减小写入的输入行的大小......我尝试停止输入线程,以便管道可能会在它们已满并且尚未读取数据时中断。但没有任何效果
请帮忙。谢谢