[Lugbz-list] serial read in thread

Andreas Kofler andreas.kofler at gmx.net
Mon Mar 31 12:09:42 CEST 2008


On Monday 31 Mar 2008, Dietrich Pescoller wrote:
> Hallo, ich habe folgendes C program was daten über die serielle
> schnittstellen mit einem device ausstauscht... Das C programm arbeitet als
> master er sendet fragen zum device und wartet auf die antwort.
>
> void read_thread()
> {
>   read(...antwort...)
> }
>
>
> main()
> {
> 	create(read_thread())
>         write(data...)
> 	while(timeout)
> 	{
>          destroy(thread);
> 	}
> }
>
> Das problem ist das das Programm terminiert mit dem message I/O possible.
>
> Nach einigem googlen habe ich folgendes verstanden: I/O possible ist eine
> folge vom SIGIO. Praktisch wird dem prozess signalisiert das daten
> verfügbar sind. Warscheinlich wird dieses Signal nur zum hauptprozess
> geliefert und nicht zum thread und so hat man einen ungehandeltes signal
> was den prozess terminiert...

Hallo,
SIGIO dient zur asynchronen E/A, wenn du diese Art der Abarbeitung wählst, 
dürfte der Thread hinfällig sein.
Hast du beim Öffnen nzb mit fcntl das ASYNC-Flag gesetzt ?
Wenn ja, versuch es ohne oder installier den Signalhandler(SIGIO) mit 
entsprechender Leseroutine.

~ andi





More information about the Lugbz-list mailing list