next up previous
Next: 5.4 共有メモリによるユーザ空間-カーネル空間の通信 Up: 5 RT-Linux APIによる実時間タスクのプログラミング Previous: 5.2 リアルタイムスレッドの生成と周期実行

5.3 FIFOによるユーザ空間-カーネル空間の通信

ユーザ空間-カーネル空間のFIFOを利用した通信が可能である.FIFOを用いた 通信では,データの順番が保持され,またユーザ空間でread()によりFIFOをリー ドブロックしておき,カーネル空間でFIFOに書き出すことで,ユーザ空間のプ ログラムの周期を制御することができる.カーネルモジュール側では以下のよ うにプログラミングする.

/* FIFOを作成する.第一引数はFIFO番号,第二引数はFIFOのサイズ・この呼び出しで作られたFIFOはユーザプログラムからは /dev/rtf1 で読み書きできる */
 rtf_create(1, 4000)

/* FIFOハンドラの生成.第一引数がFIFO番号,第二引数はハンドラ関数.このFIFOにアクセスがあるとハンドラ関数が読み出される */
 rtf_create_handler(1, &my_handler)

/* 第一引数で指定されるFIFO番号からデータを読み出す.第二引数はデータを格納するポインタ,第三引数はデータのサイズ. rtf_put も同様.*/
 rtf_get(1, &data, sizeof(data))
ユーザ空間側では以下のようにプログラミングする.

/* FIFOのオープン.ここでは1番のFIFOを書き込み専用でオープンする.*/
fd = open(“/dev/rtf1”, O_WRONLY) 

/* fdにバインドされたFIFOにデータを書き込む. */
write(fd, &data, sizeof(data)
図 4: 画像はhttp://nferre.free.fr/rtl/rtlinux_sl_v3_r.pdfより
\includegraphics[width=1.0\columnwidth]{/home/inaba/eps/hoap/fifo.eps}


generated through LaTeX2HTML. M.Inaba 平成18年5月6日