私はlibgpiodのインターフェースを中心にいくつかのコードを書いています。たとえば、高レベルを出力するようにラインを設定したいとします。フード, libgpiod はその行に対してカーネルが提供した fd を開きますioctl(fd, GPIO_V2_LINE_SET_VALUES_IOCTL, ...)
。
私の質問は次のとおりです
この特定の
ioctl()
呼び出し(GPIO_V2...
パラメータを含む)は理論的に(おそらく)次に終了できますか?書くどのファイル記述子でも可能ですか?ioctl()
理論的には、通貨は一般的にブロックされていますか?例えば、第1の要求ラインにはioctl()
チップのfdも含まれる。 I2Cはどうですかioctl()
?fd
ブロックする場合、struct() 行の基本項目は、イベントループ( libuv などの抽象イベントライブラリ)line->fd_handle->fd
で待たなければならない項目ですか?epoll()
私は研究を通してこの質問に答えようとしましたが、(a)「ioctl」と「blocking」の組み合わせを検索すると、次のような結果が得られます。環境fdブロックを実行し、(b)私が見つけることができるマニュアルページやカーネル文書にはありません。
ベストアンサー1
GPIO_V2_LINE_SET_VALUES_IOCTL
十分に安全なようです。意図した用途に適しています。ioctl
、「特殊ファイルの低レベルデバイスパラメータの操作」。実装linereq_set_values
、ロックを獲得しますが、ロックが無期限にブロックされる可能性があるとは思いません(そのユーザーはすべてブロックしません)。理論的に
ioctl
、sは主にドライバを設定するために使用されるため、非ブロックになると予想できます。しかし、いくつかioctl
はそれよりはるかに多くのことをしています。例えば、FICLONERANGE
そしてFICLONE
実際のI / Oの場合、悪いことは、いくつかのネットワークファイルシステム(NFS v4.2など)のサポートを受けているため、無期限にブロックされる可能性があることです。上記の1を参照してください。