• ベストアンサー

ファイルタイプの意味を教えてください

testのマニュアルを見ていたら、見たことのないファイル形式がいっぱい出てきてびっくりしました。 通常のファイル、ディレクトリ、シンボリックリンクの3種類は知っていたのですが、他は全部知りませんでした。それぞれどういうファイルなのか教えてください。 次のファイルの意味を教えてください。 ブロックスペシャルファイル(B) キャラクタスペシャルファイル(C) 名前付きパイプ(P) ソケット(S) あと、最後に-t[fd]というオプションがあったのですが、この-tもファイルの形式を評価するオプションなのでしょうか。 詳しい方、ご返答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.2

間違いがあったら遠慮無く訂正してください。 >ブロックスペシャルファイル(B) >キャラクタスペシャルファイル(C) UNIXにおいて入出力装置も含めて全てファイルとして扱っており、装置のインタフェース用の特殊なファイルがスペシャルファイルと言います。 装置特性としてブロック単位でアクセスするような装置がブロック型デバイス、それ以外の装置のキャラクタ単位でアクセスするような装置をキャラクタ型デバイス(raw deviceとも言う)と言いい、それぞれのデバイスのインタフェースがブロック型スペシャルファイル、キャラクタ型スペシャルファイルになります。 入出力の違いですが、ブロック型スペシャルファイルを通してのアクセスはバッファリングされ、キャラクタ型スペシャルファイルを通してのアクセスはバッファリングされません。 >名前付きパイプ(P) UNIX系OSにおいてプログラム間でデータを受け渡すための機能としてパイプというものがあります。 例が悪いかもしれませんが、あるディレクトリ配下にファイル名にpipeを含むファイルを探す場合、例えば # find . -type f -print | grep "pipe" のように実行した場合、findコマンドの出力結果をgrepコマンドが受け取るために"|"を指定すると思いますが、これがパイプ(名前なしパイプ)です。 プロセス間通信(複数のプロセスでデータをやりとりする仕組み)で使用するためにパイプが拡張されたものが名前付きパイプです。 名前付きパイプを用いることで普通にファイルに書き込んだり読み込んだりするのと同じ感覚で利用出来ます。 名前付きパイプの作成はライブラリ関数とコマンドから作成出来ます。 コマンドで作成する場合は、mkfifoコマンドを使用します。 >ソケット(S) これもプロセス間通信の一手法で、TCP/IPで通信する際にはこのソケットが使用されます。 このソケットにも2種類ありまして、TCP/IPで他ホストと接続するためのインターネットドメインソケットと同一マシン上で接続ためのUNIXドメインソケットというものがあります。 このUNIXドメインソケットは特殊なファイルを作成して通信を行います。 testコマンドで言うソケットはUNIXドメインソケットで使用するファイルの方だと思います。 >-t[fd] UNIX系OSでは、ファイルをオープンすると必ず識別するための番号が付与されます。 複数のファイルをオープンしていてもこの番号を使用するれば意図したファイルに対して入出力を行える事が出来ます。 この識別するための番号をファイルディスクリプタ(fd)す。 プロセスが起動するとファイルディスクリプタの0~1には決まったものが割り付けられています(プログラム内で変更は可能)。 それは、0が標準入力、1が標準出力、2が標準エラー出力です。 指定したファイルディスクリプタがオープンされているか、つまりファイルに割り当たっているかを調べるものだと思います。

zyousuke
質問者

お礼

Leanさん、ご返信ありがとうございます。 謎は全て解けました! と言いたいところですが、ていねいな説明をいただいても、なおちんぷんかんな部分が残ります。 ひとつ分かったことは、これらのファイルタイプを使用するときまでは、あまり深く考えるなということです。 ブロックスペシャルファイル、キャラクタスペシャルファイルについてはフロッピーなど外部の装置をあたかも普通のファイルのように読み書きするために用意されたファイルということでしょうか。 名前付きパイプとソケットの解説は、まだ今の私には理解できませんでした。 ゆくゆくこのようなファイルタイプを使用する場面が出てくるまでは、これ以上追求せず、このようなファイルタイプがあるという認識程度にとどめておくことにします。 一生使わないかも知れませんが・・・。 -t[fd]の説明はよく分かりました。 fdとはてっきりフロッピーディスクのことだと思いこんでいたのですが、ファイルディスクリプターを指していたのですね。 test -tで0、1、2を確認したところ、すべて真を返しました。 これは、標準入力、標準出力、標準エラーが全てオープンしているということが確認できたということですよね。 test -t 3を試したところ偽が返ってきました。 3以上のファイルディスクリプターをどうやって割り当てるかは忘れてしまいましたが、 これでファイルディスクリプター3がクローズしているということが確認できました。

zyousuke
質問者

補足

/dev内にブロックスペシャルファイル、キャラクタスペシャルファイルを多数発見しました。 これよりdevとは恐らくdevice(装置)のことで /devは外部装置とのインターフェース用のファイルが保存されているディレクトリーなのだということを理解しました。

その他の回答 (3)

  • Lean
  • ベストアンサー率72% (435/603)
回答No.4

>この名前無しパイプと名前付きパイプの違いが私にはよく分かりませんでした。 あるプロセスから新たにプロセスが生成された場合、プロセスを生成したプロセスと生成されたプロセスは親子関係にあり前者が親プロセス、後者が子プロセスと言われます。 名前なしパイプは親子プロセス間でしかつなげられませんが、名前付きパイプは親子関係にない別々のプロセス間でもつなげられます。

zyousuke
質問者

お礼

Leanさん、ご返信ありがとうございます。 名前なしパイプでできることは、名前付きパイプでも全てでき、かつ名前付きパイプは親子間以外の通信もできるということですね。 なので名前付きパイプは名前なしパイプの拡張版的位置づけですね。 私は、親子関係というのは子が親の環境を受け継いでおり、しかも子の変更は親に影響しないという認識を持っています。 親子関係にない別々のプロセスというのは、環境が全く異なり、しかも相互に干渉しないプロセスという感じでしょうか。 多分、名前なしパイプでは対応できず、名前付きパイプを利用すべき場面があるのでしょうが・・・うーーん難しい! もっといっぱい経験を積もうと思います。 今は、指定した2つのディレクトリー内の相違点を表示するスクリプト(本に載ってるやつ)を改良しています。 指定するディレクトリーによってはbashやfindがエラーメッセージを表示して格好悪いので、これを直そうとしています!

  • Lean
  • ベストアンサー率72% (435/603)
回答No.3

>ブロックスペシャルファイル、キャラクタスペシャルファイルについてはフロッピーなど外部の装置をあたかも普通のファイルのように読み書きするために用意されたファイルということでしょうか。 そうです、装置も普通のファイルと同じような位置づけにしているわけです。 ただ、実際問題としては一般ユーザにはパーミッションがなかったりするはずなので直接アクセスは出来ないとは思いますが。 >名前付きパイプとソケットの解説は、まだ今の私には理解できませんでした。 異なるプログラム(プロセス)間で情報のやりとりを行うようなプログラムを作成するとかなら使うことがあるかもしれませんが、デスクトップとして使用している分には意識する必要はないかとは思います。

zyousuke
質問者

お礼

Leanさん、再返信ありがとうございます。 なるほど、スペシャルファイルとはその名のとおり、管理者のみ操作可能な特殊ファイルなのですね。 そういえば、フロッピーを読み書きするためには、あらかじめマウント操作が必要であり、一般ユーザーでそれを行おうとしたら怒られたのでした。 ユニックスは当初、各所の端末装置からホストに接続する使用形態を想定していたので、マウント操作は管理者だけに許可しておけば不自由なかったのだと思います。 普段、頻繁に使用するパイプは、実は、名前無しパイプという別名があることも初めて知りました。 この名前無しパイプと名前付きパイプの違いが私にはよく分かりませんでした。 あるプロセスの出力を、パイプを介して別のプロセスへの入力とするということは、まさにプロセス間の通信ですので、 名前付きパイプやソケットというのは、このパイプの機能がもっと拡張されたものなのだろうと予想しています。 いずれ実際に使用してみれば謎が解けると思います。

回答No.1

>次のファイルの意味を教えてください。 http://www.linux.or.jp/JF/ ここで、検索すれば全てわかります。

zyousuke
質問者

お礼

FoggyMountainさん、ご返信ありがとうございます。 お教えいただいたページはリナックスの半公式サイトのようなものでしょうか。 リナックスに関するあらゆる情報が掲載されているので、端から読んでいけば、やがてリナックスマスターになれますね! ひとまずお気に入りに登録しました。 この膨大な情報の中から、ブロックスペシャルファイルとは何ぞやという情報を探してみたのですが、見つかりませんでした。 そのような常識な単語の説明は掲載されていないのか、はたまた私の検索の仕方が下手なのか、恐らく後者でしょうが、 このサイトには、これからちょくちょく寄ろうと思います。