Я использую следующий java-код для записи в stdin программы на C, которая в основном читает из stdin, добавляет A_A_A в конец строки и записывает его обратно в stdout, с которого java-программа читает, и выбрасывает 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 МБ.Выше приведен поток, который пишет в программе на 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, как я вижу их в stdout входной программы.
Некоторые строки являются частью вывода из выходного потока, но поток ввода, который пишет в программе на C после нескольких строк, таких как 17 или 18, выдает следующую ошибку
java.io.IOException: Broken pipe
Couldкакая-то помощь в этом ... Я пытался писать по одному символу за раз, используя FileWriter и не используя BufferedWriter , в этом случае он работает и продолжает писать символы.
Я попытался уменьшить размер входной строки для записи ... я попытался остановить поток ввода, чтобы было возможно, что каналы разорвутся, поскольку они заполнены, и данные не были полученыд.Но ничего не работает
Не могли бы вы помочь, пожалуйста.Спасибо