linuxKVMはioctl(2)でVMを作ったりvcpuを作ったりします。この時に使うfdは/dev/kvmファイルに対してioctl(2)を実行した時の戻り値です。ioctl(2)の戻り値がioctl(2)可能なfdとなってます。ユーザーランドに返すfdはどうやって作るのかというのが今回のめもです。出来たコードはこうなります。__func__);}module_init(fd_test_init);module_exit(fd_test_exit);まずはmiscデバイスを作っていて、最初にこのファイルを開いてioctl(2)を実行します。するとioctl(2)を実行できるfdが返るという感じです。このfdの作り方は以下の3ステップでできます。fdを新たに割り当てfile構造体を作成fdとファイル構造体を関連付けるあ、上記のコードだと1と2は逆ですが。1のfdの割り当てはget_unused_fd_flags()で行います。2はanon_inode_getfile()です。この関数の3番目の引数はfile構造体のprivate_data変数に設定するデータです。上記のコードだとfd_test_data構造体を設定してます。最後の3はfd_install()で、見ての通りfdとfile構造体を渡してます。fdをユーザーランドに返せば完了です。テストコードはこんな感じです。close(fd);}これをコンパイルして動かすとこんなふうになります。2017の9日目の記事です。(1)はてなブログをはじめよう!masami256さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。