- ベストアンサー
SIGIOについて
SIGIOの解説をみると「I/Oが使用可能になった」との記述がありますが これは例えばシリアルポートに当てはめると受信完了と送信可能の場合に発行 されるシグナルなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>実はsigactionでSIGIO設定しfcntl(fd, F_SETOWN, getpid());で >シリアルポートのデータ受信を認識しようとおもっているのですが >もっと良い方法があるのでしょうか? 具体的なことがわからないので正確な判断はできませんが、 特に問題は無いと思いますが。 ただ、自分ではまだ使ったことがありませんので、 未確認です(^^;; ただ、プログラム上というか、手順というか、その辺を試したり、確認したりする必要はあると思います。 受信完了がどういう意味かによりますが、 たとえば送信側が1024バイトを送信した場合は、 SIGIOが発生しても、その時に読み込めるデータは おそらく1024バイトではありません。 場合によれば、1バイト受信しただけでSIGIOが発生するかも知れません。 それでいいかどうかです。 こういう場合に必ず1024バイト単位で処理をしたいなら、 別なプロセスなりスレッドなりでwait I/Oで 1024バイト読み込み、完了した時点で処理プロセスへ シグナルなりなんなりで通知するというような 処理にすると思います。 こういう感じのプログラムなら何度か作ってます。
その他の回答 (1)
- terra5
- ベストアンサー率34% (574/1662)
受信完了という判断はできないと思うので、 受信データがあるという意味でしょう。 また、通常このシグナルは出ません。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/fcntl.2.html http://www.linux.or.jp/JM/html/LDP_man-pages/man7/signal.7.html
補足
実はsigactionでSIGIO設定しfcntl(fd, F_SETOWN, getpid());で シリアルポートのデータ受信を認識しようとおもっているのですが もっと良い方法があるのでしょうか?