我正在使用下面的java代碼寫入基本上從stdin讀取的C程序的stdin中,並將A_A_A添加到行尾並將其寫入返回到java程序從stdout中取出並輸出標準輸出Broken Pipe Java程序在外部C程序stdin中寫入和從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的文本文件。以上是以下是這是繼
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();
}
現在,當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程序的標準輸出讀入寫在C程序中的線程... 我運行程序
我constabtly面臨的破碎:管道錯誤
我能夠寫一些行到C程序,我可以發ee他們在輸入程序的標準輸出中。
有些線路是從輸出線,但是這是後幾行像17或18寫在C程序的輸入線,輸出部分提供了以下錯誤
java.io.IOException: Broken pipe
可以在此有一個人幫助...我曾嘗試使用FileWriter一次寫入一個字符,而不是使用BufferedWriter在這種情況下,它的工作原理和不斷寫入字符。
我試圖減小輸入行的大小寫...我已經嘗試停止輸入線程,以便管道可能因爲已滿而數據尚未讀取而中斷。但沒有任何作品
請幫忙。 謝謝
我已經能夠通過將C程序中的buf大小增加到1 MB來解決Broken Pipe問題,但是在文件被寫入後,java輸出線程掛起了一段時間,直到它結束 – ssD 2011-06-01 17:38:52