• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のread関数に関するファイルディスクリプタ)

C言語のread関数についての疑問

このQ&Aのポイント
  • ファイルディスクリプタを使用するC言語のread関数についての疑問です。
  • open関数で得られたファイルディスクリプタをread関数に渡す方法が分かりません。
  • 具体的なコード例を挙げながら質問しています。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

>open関数からの返り値はアドレス的な意味をもつということでしょうか 配列の添字であり、それ以上でも以下でもありません。 配列の添字は「アドレス的な意味を持つ」とあなたが思うのであればそうです。 >というのも、課題でopen,read関数等を自力で作成せよ、というような課題が出されたので、どうにかして作成したいので・・・ Unix/Linuxでは、openやreadはシステムコール(言語から扱える一番下位レベルの関数)なので、openやreadを呼び出すことなしに同じ機能の関数を作ることは不可能です。 Windowsであれば、Win32APIなどがシステムコールに当たると思いますので、それらを使えばopen/read相当を自作するのは可能でしょう。 システムコールを呼び出すのに必要な情報を全部持ったような構造体の配列を作ればいいわけです。その添字がファイルディスクリプタです。

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

その他の回答 (6)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.7

大雑把に言うと、OS内部でopenしたデバイス(ファイルの形式を取っていても「ファイル」とは似ても似つかない場合もあるのがミソ)とディスクリプタ番号の符合を行っているだけです。

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

そもそもファイルディスクリプタから「パス情報を得る」というのが何を意味するのかわかりません. 実際にデータを読み書きするときに「パス情報」が必要とは思えないよね?

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

ひとまずプラットホームはなんでしょうか? 「WindowsのWIN32APIを使ってopen,read,write,close互換ライブラリを作ろう」 とかなら意味わかりますけど、 unixやlinuxだとopen,read,write,closeはシステムコールなので open,read,write,close互換ライブラリを作ろうとしたところで 結局システムコールのopen,read,write,close使うことになってしまいますが。

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.3

open(), read() を「関数」と言ってますが、システムコールですよ? システムコールを自作したいと言ってる?

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

noname#183277
質問者

補足

あまり知識がないもので、すいません(^^;)。 これは自作できるようなものではないのでしょうか

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

おおざっぱに動作を書けば次のようになります。 openでファイル等と番号を関連付ける。OSでその関係を覚えておく → read等で番号を指定する →OSでその番号に関連付けてあるファイル等にアクセスする パス情報っていうのがどこから出てきたのか、よくわかりません

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

noname#183277
質問者

補足

回答ありがとうございます。 パス情報は、絶対パスや相対パスをここでは言っています。(上の例では/home/XXX/YYYです)説明不足ですいません(^^;)。 下の方の補足にも記述したんですが、もしoepn関数やread関数を自力で作成するときは、どのようにしたらいいのでしょうか

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

ちょっと不正確ですがわかりやすく説明するなら、 ファイル入出力ライブラリはその内部でファイル入出力に必要な情報を管理する配列を持っています。 open関数はその管理配列の中で使用されていない要素を選び出し、その配列要素の中に必要な情報を格納したあと、その要素番号をファイルディスクリプタとして返します。 read関数では、受け取ったfdをもとにその管理用配列にアクセスすれば、必要な情報を取得できる、という流れになります。

noname#183277
質問者

お礼

遅くなってしまい申し訳ありません. 回答して頂きありがとうございました.

noname#183277
質問者

補足

回答ありがとうございます。 open関数からの返り値はアドレス的な意味をもつということでしょうか そうすると、もし自作のopen,read関数を作成するときには、どのようにしたらいいのでしょうか というのも、課題でopen,read関数等を自力で作成せよ、というような課題が出されたので、どうにかして作成したいので・・・

関連するQ&A