serial read in thread

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...

Was meint ihr dazu? Könnt ihr mir weiterhelfen?

Danke
Dietrich

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

> 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

Hallo,
danke für den Hinweis, ja ohne async funktioniert das ohne probleme. Das ganze
kommt von einer modbus library. Momentan habe ich das so gelöste hoffe das
hat nicht andere folgen...

Danke
diti

ciao lista,

ho sostituito la scheda di rete in una ubuntu.

La nuova scheda prende però il nome eth1 e mi sballano tutte le impostazioni di rete.

come si fa a dire ad ubuntu che voglio ancora il nome eth0 ?

TIA
ciao Roberto

Ciao Roberto,

in

/etc/udev/rules.d/75-persistent-net-generator.rules

scrivi:

SUBSYSTEM=="net", DRIVERS=="?*", SYSFS{address}=="00:13:72:89:79:26", NAME="eth0"
SUBSYSTEM=="net", DRIVERS=="?*", SYSFS{address}=="00:13:72:89:79:27", NAME="eth1"

naturalmente sostituendo i mac-address delle due schede giusti.

bye

ciao lista,

ho sostituito la scheda di rete in una ubuntu.

La nuova scheda prende però il nome eth1 e mi sballano tutte le
impostazioni di rete.

come si fa a dire ad ubuntu che voglio ancora il nome eth0 ?

Ciao,

ti hanno gia` risposto sulla domanda precisa che hai fatto (rinominare
la scheda di rete).

Ma mi sto chiedendo:... non e` che fai prima a configurarti la nuova
eth1 - magari anche con la
GUI) con i settaggi giusti?

O c'e` un motivo piu` profondo per cui vuoi che si chiami proprio eth0?

Bye,
Chris.

ciao,

grazie a tutti per le risposte, veloci ed esaurienti come sempre.

Per Chris: si, volevo proprio sapere come fa ubuntu a nominare le schede.

Happy fishing!

Roberto De Colle
GNU/Linux user
Bressanone

-----Messaggio originale-----