web-dev-qa-db-ja.com

/ devディレクトリ内のアイテムとは正確には何ですか?

私は、シリアルポートに接続されたモデムに書き込むことで無線メッセージを送信するアプリケーションをC++で作成しています。これを行うには、次の形式のコードを使用してファイル記述子を取得する必要があります

fd1=open(“/dev/ttyS0″, O_RDWR | O_NOCTTY | O_NDELAY);

これにより、/ dev内のアイテムの性質に興味を持ちました。これらのアイテムの内容を把握するために、

Sudo cat /dev/ttyS0

メッセージを取得するためだけに

cat: /dev/ttyS0: Input/output error

それは私の理解をまったく助けませんでした。これらのアイテムは、実際にはすべてのファイルですか、それともドライバー機能へのアクセスを許可する一種のリンクですか?

7

Linuxのすべてはファイルまたはディレクトリです。 /devの中のものは特別なファイルです。

デバイスの大部分は、ブロックデバイスまたはキャラクターデバイスです。ただし、他のタイプのデバイスが存在し、作成できます。一般に、「ブロックデバイス」はデータを保存または保持するデバイスであり、「キャラクターデバイス」はデータを送信または転送するデバイスと考えることができます。たとえば、ディスケットドライブ、ハードドライブ、CD-ROMドライブはすべてブロックデバイスであり、シリアルポート、マウス、パラレルプリンターポートはすべてキャラクターデバイスです。ある種の命名スキームがありますが、ほとんどの場合、これらは完全に非論理的です。

デバイスは、「ブロック」や「キャラクター」、「メジャー」や「マイナー」などのタイプによって定義されます。メジャー番号はデバイスを分類するために使用され、マイナー番号は特定のデバイスタイプを識別するために使用されます。たとえば、プライマリコントローラに接続されているすべてのIDEデバイスには、メジャー番号3があります。マスターデバイスとスレーブデバイス、および個々のパーティションは、マイナー番号を使用してさらに定義されます。

Linux-Filesystem-Hierarchy から取得


2つのオプション:

  1. 試して

     cat < /dev/ttyS0
    

    それが機能するかどうかを確認します。

  2. このエラーを解決するには、ユーザーを同じグループに追加します(つまり、dialout)。

7
Rinzwind

The Linux Documentation Project から:

コンピューターは、各シリアルポートを「デバイス」と見なします。かつてはターミナルがシリアルポートの最も一般的な使用であったため、ターミナルデバイスと呼ばれることもあります。このようなシリアルポートごとに、/ dev(デバイス)ディレクトリに特別なファイルがあります。/dev/ttyS0)は、DOS/Windowsの世界ではCOM1として知られているシリアルポート用の特別なファイルです。

テキストを端末に送信するには、コマンドラインコマンドの標準出力を適切な特殊ファイルにリダイレクトできます。たとえば、コマンドプロンプトで「echo test>/dev/ttyS1」と入力すると、/ dev/ttyS1に対する書き込み権限がある場合、ttyS1(COM2)の端末に「test」という単語が送信されます。同様に、「cat my_file>/dev/ttyS0」と入力すると、ファイルmy_fileの内容がCOM1(ttyS0)に送信されます。

2
SirCharlo