ioctl呼び出しがブロックされますか?

ioctl呼び出しがブロックされますか?

私は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

  1. GPIO_V2_LINE_SET_VALUES_IOCTL十分に安全なようです。意図した用途に適しています。ioctl、「特殊ファイルの低レベルデバイスパラメータの操作」。実装linereq_set_values、ロックを獲得しますが、ロックが無期限にブロックされる可能性があるとは思いません(そのユーザーはすべてブロックしません)。

  2. 理論的にioctl、sは主にドライバを設定するために使用されるため、非ブロックになると予想できます。しかし、いくつかioctlはそれよりはるかに多くのことをしています。例えば、FICLONERANGEそしてFICLONE実際のI / Oの場合、悪いことは、いくつかのネットワークファイルシステム(NFS v4.2など)のサポートを受けているため、無期限にブロックされる可能性があることです。

  3. 上記の1を参照してください。

おすすめ記事