
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- オープンソース ChatGPTをスプレッドシートと連携して自動でリサーチしたいんですがうまく出来ません。。。 1 2023/05/05 15:59
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- 経済学 「政府支出乗算」の求め方を教えてください。 2 2022/11/20 19:52
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- 計算機科学 相関係数 1 2022/07/29 11:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
C言語 重複しない4ケタの乱数...
-
遅延バインディングを使用でき...
-
For文と配列
-
Sourcearrayの読み方を教えてく...
-
Excel VBAで配列の途中から(X)M...
-
VB.net 引数で配列変数を渡す際...
-
ラジオボタンのチェックをEnter...
-
変数を動的に作るには?
-
エクセルで小数の中の最大値を...
-
排列と配列の漢字の使い分けは
-
空き番号探し
-
文字コード判別ルーチンGet...
-
javaプログラムについて
-
C言語で3次元配列の課題をして...
-
Javaで文字と数字が混ざったも...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
パソコンキーボードで時分秒を...
-
変数を動的に作るには?
-
VBでbyte配列型のインスタンス...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
ラジオボタンのチェックをEnter...
-
C言語 重複しない4ケタの乱数...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
Visual C++ でコントロールを...
-
C++、クラスメンバの構造体配列...
-
遅延バインディングを使用でき...
-
int型配列の一括初期化
おすすめ情報