witchの日記: (ROBO)(メモ) X-9 select()を利用したFIFO からの読み込み
MSP(L-Card側モーション再生プログラム)の通信処理を多重化するために BusyLoop を select()に置き換えていて気付いた(知った)のでメモ
シリアルポート2つ以外に FIFO (コマンドラインから操作するために利用)を読む必要があるので、これも select 処理に組み込み。
が、一度データを読むと select()で入力待ちしない…
「なんで??」と Googleで調べて回ったら、いつも御世話になっている「東北学院大学 工学部 機械創成工学科 ロボット開発工学」のページに到達。
「Linux Device Driver」ページ「ブロックとSelect」のサンプルプログラムに
if((r==1)&&(FD_ISSET(fd,&fds)))
{
if(mode)
{
printf("write operation prepaired\n");
write(fd,message,strlen(message));
// close して 初めて読んだことになるから 一旦 close
close(fd); fd=open("/dev/blktest",O_RDWR);
}
という記述が…
早速自分のプログラムでも読み込み後に一旦閉じて開き直すようにしたら正しく動くようになりました。
ふむむ…シリアルポートは閉じなくても動いていたので判らなかったです。
これでまた一歩前進。
(ROBO)(メモ) X-9 select()を利用したFIFO からの読み込み More ログイン