質問: C言語を用いてLinuxのデバイスファイルを操作する場合は、 `open`で得たファイルディスクリプタを使って`ioctl`で操作をすると思います。 もしこの操作をC++で実装する場合、またQtを使って実装する場合は **それぞれのライブラリにデバイスファイルを操作するための関数は存在しますか?** C++を使っているならC++の標準ライブラリで、Qtを使っているならQtのライブラリで実装できるなら なるべくそっちを使うべきだと、私は認識しています。 もちろん例外はあるかと思いますが、**その認識についても間違ってはいないでしょうか?** もし、デバイスファイルを操作するための関数が存在しない場合 **皆さんはどのように実装しているのでしょうか?** どうしてもここの部分はゴリゴリのC言語ライクなコードになってしまうのか それともC++、Qtのライブラリを挟んで操作するのか(`iostreams`や`QFile`?) ご教授いただければと思います。 ファイル操作についての知識が浅いため 根本的に勘違いをしている部分もあるかもしれません 是非回答をよろしくお願いいたします。
回答: こんにちは。 「Linuxのデバイスファイル」はLinux固有の機能です。Windowsにはありません。TRONにもないでしょう。 C++やQtはマルチプラットフォームな開発ツールですので、OS固有の機能を直接提供するケースはほぼありません。提供する場合は、**できるだけ**多くのOS(プラットフォーム)上で同じ記述で対応できるよう抽象化してあります。 「デバイスファイル」は抽象化が難しい(どのような機能を提供するのかOS毎に異なるため)ので、直接のサポートはないです。 > > C++を使っているならC++の標準ライブラリで、Qtを使っているならQtのライブラリで実装できるなら > > なるべくそっちを使うべきだと、私は認識しています。 > > もちろん例外はあるかと思いますが、その認識についても間違ってはいないでしょうか? > > > 私はその方針に賛成です。しかし、恐らく特に気にしていない人が大半だろうと思います。もしかすると明確に反対意見をお持ちの方もいらっしゃるかも知れません。つまり、それほど普遍的なルールではないように感じます。 > > 皆さんはどのように実装しているのでしょうか? > > どうしてもここの部分はゴリゴリのC言語ライクなコードになってしまうのか > > それともC++、Qtのライブラリを挟んで操作するのか(iostreamsやQFile?) > > > 私なら、iostreamやQFile経由で使います。もちろん、その部分のコードはOS毎に記述を変える必要があります。例えば、Windowsに/dev/urandomはないですから。それは受け入れざる得ないと思います。 あまり余分な手間がかからないならマルチプラットフォームになるよう記述しています。