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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで配列の計算
-
パソコンキーボードで時分秒を...
-
IF関数でEmpty値を設定する方法。
-
For文と配列
-
変数を動的に作るには?
-
C言語 配列からランダムに素数...
-
VBでbyte配列型のインスタンス...
-
配列の要素数を超えた参照のコ...
-
動的配列が存在(要素が有る)か...
-
VBAで配列のデータを検索
-
ComboBoxのItem追加
-
ラジオボタンのチェックをEnter...
-
VB.net 引数で配列変数を渡す際...
-
遅延バインディングを使用でき...
-
C#の質問
-
格闘ゲームのコマンド判定について
-
ORA-01858: 数値を指定する箇所...
-
javaで質問です。 文字列2023/2...
-
JAVAでの占い
-
1~100までの数字を表示し、か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンキーボードで時分秒を...
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
VB.net 引数で配列変数を渡す際...
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
C言語 重複しない4ケタの乱数...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
Excel VBAで配列の途中から(X)M...
-
【MFC】GetCount()とGetSize()...
-
For文と配列
-
複数のテキストボックスに同じ...
-
VBでbyte配列型のインスタンス...
-
遅延バインディングを使用でき...
-
格闘ゲームのコマンド判定について
-
ラジオボタンのチェックをEnter...
-
Visual C++ でコントロールを...
-
マップチップの当たり判定の出し方
おすすめ情報