SIGIOの解説をみると「I/Oが使用可能になった」との記述がありますが
これは例えばシリアルポートに当てはめると受信完了と送信可能の場合に発行
されるシグナルなのでしょうか?

A 回答 (2件)

>実はsigactionでSIGIO設定しfcntl(fd, F_SETOWN, getpid());で


>シリアルポートのデータ受信を認識しようとおもっているのですが
>もっと良い方法があるのでしょうか?

具体的なことがわからないので正確な判断はできませんが、
特に問題は無いと思いますが。
ただ、自分ではまだ使ったことがありませんので、
未確認です(^^;;

ただ、プログラム上というか、手順というか、その辺を試したり、確認したりする必要はあると思います。
受信完了がどういう意味かによりますが、
たとえば送信側が1024バイトを送信した場合は、
SIGIOが発生しても、その時に読み込めるデータは
おそらく1024バイトではありません。
場合によれば、1バイト受信しただけでSIGIOが発生するかも知れません。
それでいいかどうかです。

こういう場合に必ず1024バイト単位で処理をしたいなら、
別なプロセスなりスレッドなりでwait I/Oで
1024バイト読み込み、完了した時点で処理プロセスへ
シグナルなりなんなりで通知するというような
処理にすると思います。
こういう感じのプログラムなら何度か作ってます。
    • good
    • 0

受信完了という判断はできないと思うので、


受信データがあるという意味でしょう。
また、通常このシグナルは出ません。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
http://www.linux.or.jp/JM/html/LDP_man-pages/man …

参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …

この回答への補足

実はsigactionでSIGIO設定しfcntl(fd, F_SETOWN, getpid());で
シリアルポートのデータ受信を認識しようとおもっているのですが
もっと良い方法があるのでしょうか?

補足日時:2002/02/26 08:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング