Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Java и FIFO / 9 сообщений из 9, страница 1 из 1
18.05.2005, 13:20
    #33071910
Java и FIFO
Что-то не так?

Пытаюсь разобратся как работать с FIFO устройствами в Linux. Написал
два исходника.

reader.java
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
import java.io.*;
import java.util.*;

public class reader{
    public static void main(String[] args)
    {
	try{    	    
	    System.out.print("\nTrying to create InputStream ");
	    InputStream FIS=new FileInputStream(args[ 0 ]);
	    System.out.println("OK");
	    int res= 0 ;
	    int count= 0 ;
	    System.out.println("\nReader ready");
	    boolean state=true;
	    while(state)
	    {
	        res=FIS.read();
		System.out.print('.');
		count++;		
	    }
	    FIS.close();
	    System.out.println("\nReader process complete. There are "+count+" bytes");
	}
	catch(Exception Ex)
	{
	    System.out.println(Ex);
	}
	
    }
}

writer.java
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
import java.io.*;
import java.util.*;

public class writer{
    public static void main(String[] args)
    {
	try{
    	    Random r=new Random();
	    System.out.println("\nTrying to create OutputStream ");	    
	    OutputStream FOS=new FileOutputStream(args[ 0 ]);
	    System.out.println("OK");
	    int res= 0 ;
	    int size= 10000 ;
	    int v;
	    boolean err;
	    for(int i= 0 ;i<size;i++)
	    {
		v=r.nextInt( 256 );
		FOS.write(v);
		System.out.print('.');		
	    }
	    FOS.close();
	    System.out.println("\nWriter process complete! There are "+size+" bytes wrote.");
	}
	catch(Exception Ex)
	{
	    System.out.println(Ex);
	}
    }
}

Создаю FIFO-файл

Код: plaintext
1.
> mknod stream1 p

Запускаю в одной сессии reader, а в другой врайтер

Код: plaintext
1.
2.
3.
> java reader stream1

> java writer stream1

Ридер завершает работу нормально, a врайтер вылетает с исключением

Код: plaintext
1.
java.io.IOException: Broken pipe

У кого-нибудь есть соображения?


P.S. У меня RedHatLinux(Fedora), Java(TM) Standard Edition (build 1.5.0-b64).)
...
Рейтинг: 0 / 0
18.05.2005, 13:44
    #33072004
Java и FIFO
Да. Забыл добавить. Цикл до 10000 не доходит.
...
Рейтинг: 0 / 0
18.05.2005, 14:27
    #33072207
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java и FIFO
Ситник ДимаДа. Забыл добавить. Цикл до 10000 не доходит.
А до куда доходит?
...
Рейтинг: 0 / 0
18.05.2005, 14:53
    #33072313
Java и FIFO
По разному. Обычно 200-300 байтов прочтет и вываливается. Случайный процесс будто.

Да! И еще я подправил ридер. Так правильнее.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
import java.io.*;
import java.util.*;

public class reader{
    public static void main(String[] args)
    {
	try{    	    
	    System.out.print("\nTrying to create InputStream ");
	    InputStream FIS=new FileInputStream(args[ 0 ]);
	    System.out.println("OK");
	    int res= 0 ;
	    int count= 0 ;
	    System.out.println("\nReader ready");
	    while((res=FIS.read())> 0 )
	    {
		System.out.print('.');
		count++;		
	    }
	    FIS.close();
	    System.out.println("\nReader process OK. There are "+count+" bytes");
	}
	catch(Exception Ex)
	{
	    System.out.println(Ex);
	}
	
    }
}
...
Рейтинг: 0 / 0
18.05.2005, 15:05
    #33072371
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java и FIFO
может попробовать не рандомные числа в него писать, а какое-нибудь одно и тоже?
полный стектрейс тоже было бы не плохо увидеть.
хотя, скорее всего, это баг jdk64. попробуй под другой версией выполнить этот код.
...
Рейтинг: 0 / 0
18.05.2005, 15:22
    #33072442
Java и FIFO
Ладно. Попробую вечером поставить JDK 1.4.x. Хотя для меня сейчас
важнее в принципе разобратся как работать с FIFO-файлами. Можно
было попробовать на C++. Ну если у вас еще появятся мысли - пишите
в топик. Буду периодически заглядывать.

С уважением
Ситник Дима
...
Рейтинг: 0 / 0
18.05.2005, 17:48
    #33072959
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java и FIFO
Bugfix:
Код: plaintext
while((res=FIS.read())>=0)
...
Рейтинг: 0 / 0
18.05.2005, 19:01
    #33073142
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Java и FIFO
А ты после кажного цикла попробуй вставить
Код: plaintext
1.
System.out.flush()
Может, поможет...
...
Рейтинг: 0 / 0
19.05.2005, 09:33
    #33073685
Java и FIFO
XMBugfix:
Код: plaintext
while((res=FIS.read())>=0)


Пепел на мою голову!

Спасибо.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Java и FIFO / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]