
C言語のread関数に関するファイルディスクリプタについて質問です。
open関数から得られたファイルディスクリプタを、一般的には変数(例:fd)に代入して、fdをread関数や、write関数の第1引数として用いるんですが、ファイルディスクリプタは数値のはずなので、それを引数として用いてもどうやってそこからパス情報を得ることが出きるのかが分かりません。
例えば以下のような場合です。
******
省略
fd = open("/home/XXX/YYY", O_RDONLY);
read(fd, buf, 10);
省略
******
誰か詳しい方がおりましたら、どうかご教授よろしくお願い致します。
No.4ベストアンサー
- 回答日時:
>open関数からの返り値はアドレス的な意味をもつということでしょうか
配列の添字であり、それ以上でも以下でもありません。
配列の添字は「アドレス的な意味を持つ」とあなたが思うのであればそうです。
>というのも、課題でopen,read関数等を自力で作成せよ、というような課題が出されたので、どうにかして作成したいので・・・
Unix/Linuxでは、openやreadはシステムコール(言語から扱える一番下位レベルの関数)なので、openやreadを呼び出すことなしに同じ機能の関数を作ることは不可能です。
Windowsであれば、Win32APIなどがシステムコールに当たると思いますので、それらを使えばopen/read相当を自作するのは可能でしょう。
システムコールを呼び出すのに必要な情報を全部持ったような構造体の配列を作ればいいわけです。その添字がファイルディスクリプタです。
No.5
- 回答日時:
ひとまずプラットホームはなんでしょうか?
「WindowsのWIN32APIを使ってopen,read,write,close互換ライブラリを作ろう」
とかなら意味わかりますけど、
unixやlinuxだとopen,read,write,closeはシステムコールなので
open,read,write,close互換ライブラリを作ろうとしたところで
結局システムコールのopen,read,write,close使うことになってしまいますが。
No.2
- 回答日時:
おおざっぱに動作を書けば次のようになります。
openでファイル等と番号を関連付ける。OSでその関係を覚えておく
→ read等で番号を指定する
→OSでその番号に関連付けてあるファイル等にアクセスする
パス情報っていうのがどこから出てきたのか、よくわかりません
この回答への補足
回答ありがとうございます。
パス情報は、絶対パスや相対パスをここでは言っています。(上の例では/home/XXX/YYYです)説明不足ですいません(^^;)。
下の方の補足にも記述したんですが、もしoepn関数やread関数を自力で作成するときは、どのようにしたらいいのでしょうか
No.1
- 回答日時:
ちょっと不正確ですがわかりやすく説明するなら、
ファイル入出力ライブラリはその内部でファイル入出力に必要な情報を管理する配列を持っています。
open関数はその管理配列の中で使用されていない要素を選び出し、その配列要素の中に必要な情報を格納したあと、その要素番号をファイルディスクリプタとして返します。
read関数では、受け取ったfdをもとにその管理用配列にアクセスすれば、必要な情報を取得できる、という流れになります。
この回答への補足
回答ありがとうございます。
open関数からの返り値はアドレス的な意味をもつということでしょうか
そうすると、もし自作のopen,read関数を作成するときには、どのようにしたらいいのでしょうか
というのも、課題でopen,read関数等を自力で作成せよ、というような課題が出されたので、どうにかして作成したいので・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に作るには?
-
パソコンキーボードで時分秒を...
-
VBで作った乱数を一度も重複さ...
-
IF関数でEmpty値を設定する方法。
-
重複なしでランダムに画像を表...
-
排列と配列の漢字の使い分けは
-
System.err. printlnとSystem.o...
-
InputStream.read()でタイムア...
-
VBSエラー"オブジェクト型の変...
-
javaのコンパイルエラーについ...
-
JSPやサーブレットでSystem.out...
-
JavaScriptの変数をjavaのメソ...
-
「配列定数は、イニシャライザ...
-
javaです
-
jspでの二次元配列
-
JButton-背景の透明化
-
C#で、あるクラスのメンバーす...
-
int型のゼロ埋め
-
createImage()を使い コンパイル
-
プログラミングの問題です。大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
動的配列が存在(要素が有る)か...
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
複数のテキストボックスに同じ...
-
配列の要素数を超えた参照のコ...
-
VBでbyte配列型のインスタンス...
-
10進数を4桁のバイト配列に格納...
-
ジャグ配列とは
-
ログデータを表示するグラフに...
-
ゲーム箱入り娘のつくりかた
-
遅延バインディングを使用でき...
-
VBで作った乱数を一度も重複さ...
-
C#の質問
-
このプログラムがわかりません
-
【MFC】GetCount()とGetSize()...
おすすめ情報