質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

578閲覧

C++またはQtでのスペシャルファイル・デバイスファイルの操作

tuyudaku

総合スコア75

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/06/11 01:37

C言語を用いてLinuxのデバイスファイルを操作する場合は、
openで得たファイルディスクリプタを使ってioctlで操作をすると思います。

もしこの操作をC++で実装する場合、またQtを使って実装する場合は
それぞれのライブラリにデバイスファイルを操作するための関数は存在しますか?
C++を使っているならC++の標準ライブラリで、Qtを使っているならQtのライブラリで実装できるなら
なるべくそっちを使うべきだと、私は認識しています。
もちろん例外はあるかと思いますが、その認識についても間違ってはいないでしょうか?

もし、デバイスファイルを操作するための関数が存在しない場合
皆さんはどのように実装しているのでしょうか?
どうしてもここの部分はゴリゴリのC言語ライクなコードになってしまうのか
それともC++、Qtのライブラリを挟んで操作するのか(iostreamsQFile?)
ご教授いただければと思います。

ファイル操作についての知識が浅いため
根本的に勘違いをしている部分もあるかもしれません
是非回答をよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

「Linuxのデバイスファイル」はLinux固有の機能です。Windowsにはありません。TRONにもないでしょう。
C++やQtはマルチプラットフォームな開発ツールですので、OS固有の機能を直接提供するケースはほぼありません。提供する場合は、できるだけ多くのOS(プラットフォーム)上で同じ記述で対応できるよう抽象化してあります。
「デバイスファイル」は抽象化が難しい(どのような機能を提供するのかOS毎に異なるため)ので、直接のサポートはないです。

C++を使っているならC++の標準ライブラリで、Qtを使っているならQtのライブラリで実装できるなら

なるべくそっちを使うべきだと、私は認識しています。
もちろん例外はあるかと思いますが、その認識についても間違ってはいないでしょうか?

私はその方針に賛成です。しかし、恐らく特に気にしていない人が大半だろうと思います。もしかすると明確に反対意見をお持ちの方もいらっしゃるかも知れません。つまり、それほど普遍的なルールではないように感じます。

皆さんはどのように実装しているのでしょうか?

どうしてもここの部分はゴリゴリのC言語ライクなコードになってしまうのか
それともC++、Qtのライブラリを挟んで操作するのか(iostreamsやQFile?)

私なら、iostreamやQFile経由で使います。もちろん、その部分のコードはOS毎に記述を変える必要があります。例えば、Windowsに/dev/urandomはないですから。それは受け入れざる得ないと思います。
あまり余分な手間がかからないならマルチプラットフォームになるよう記述しています。

投稿2019/06/11 02:19

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuyudaku

2019/06/11 02:39

>「デバイスファイル」は抽象化が難しいので、直接のサポートはないです。 なるほど、C言語ライクで書くかライブラリを経由するかになるのですね >それほど普遍的なルールではないように感じます。 確かに、会社でもその様な考えが少なく感じます 会社自体が古いので、新しいことを取り入れるのに消極的なせいでしょうか 実績重視での考えが強いです。私は実績を増やしたいのですが... >私なら、iostreamやQFile経由で使います。 なるほど、C言語での実装とライブラリを経由した実装 両方を準備してみて、比較してみることを検討します。 Chironianさんの回答は 欲しい情報を的確に、また要求以上の回答が来てとても勉強になります いつもありがとうございますm(_ _)m 回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問