パスワードを忘れた? アカウント作成
362528 journal

witchの日記: (ROBO)(メモ) X-9 select()を利用したFIFO からの読み込み

日記 by witch

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);
                }

という記述が…
早速自分のプログラムでも読み込み後に一旦閉じて開き直すようにしたら正しく動くようになりました。
ふむむ…シリアルポートは閉じなくても動いていたので判らなかったです。

これでまた一歩前進。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...