
No.4ベストアンサー
- 回答日時:
★『read』の戻り値は。
・この関数は低水準ですね。
この関数はディスクからある決まったバイト単位でデータ(ファイル)を読み込みます。
戻り値は読み込めたバイト数が返されます。あとエラーも返します。
第3引数の『count』の数が返される(戻り値)の最大値となります。
・小さいファイルの場合は1回で読み込めますが、大きいファイルは数回、または数十回の
読み込みを繰り返してデータを取得します。
たとえば、ファイルのサイズが 12345 バイトで第2引数の『buffer』と第3引数の『count』が
4096 バイトまで読み込める場合は次のようになります。
(1)read( dp, buff, 4096 );…戻り値は 4096、全体の読み込みサイズは 4096
(2)read( dp, buff, 4096 );…戻り値は 4096、全体の読み込みサイズは 8192
(3)read( dp, buff, 4096 );…戻り値は 4096、全体の読み込みサイズは 12288
(4)read( dp, buff, 4096 );…戻り値は 57、全体の読み込みサイズは 12345
(5)read( dp, buff, 4096 );…戻り値は 0(これ以上は読み取れなかった、つまり EOF 到達!)
※上記はエラーが起きなかった場合です。エラーが起きると -1 が戻り値で返されます。
・あとこの関数は低水準ですのでバッファリングなどの機能はありません。
これは類似関数に1文字単位(fgetc)、行単位(fgets)などの関数が存在しないということです。
さらに fgetc、fgets 関数は『read』、『write』などの低水準の関数を内部で呼び出して機能を
作っています。高水準関数(fputc、fgets)では、バッファリング機能を組み込んで1文字単位、
行単位などの高度な入出力機能を提供しているのです。
・なお、低水準とはかなりハードウェアや OS に依存している関数群の事です。
ファイル入出力では『creat』、『open』、『close』、『read』、『write』、『lseek』などが
あります。これらの関数群は OS に強く依存しますので他の OS への移植性を考える場合には
利用しない事を強くお勧めします。移植性も考えてのファイル入出力は、高水準関数(fputc、fgets)
などの関数を利用して下さい。
戻り値とは:
・関数の呼び出し元に関数の処理結果などを返します。
『戻り値』=『返す』=『リターン』などみんな同じ意味です。
ただし、『戻す』という表現は、戻り値で『戻す』のか、ポインタを使った引数に『戻す』のかで
少し違いがあります。基本的に戻り値では1つの値しか返せません。たくさんの情報を返したい場合は
構造体へのポインタを返したり、エラーなどの情報だけを戻り値に返して残りはポインタを使った引数
に『戻す』こともあります。この辺は関数マニュアルを参照して下さい。関数によって異なります。
・戻り値の概念としては、関数の処理が正常か、異常かのチェックを行ったり、何かを取得した場合の値
などを返します。数学でいうと『fx』という関数で数式があり、ある値(引数)を渡すを数式を計算して
その結果を戻す(戻り値)という概念に似ています。よって、呼び名か『関数』となっているのです。
・以上。おわり。→下の『参考URL』もどうぞ。
参考URL:http://www5c.biglobe.ne.jp/~ecb/c/13_01.html,htt …
レス遅れて申し訳ありませんでした。read関数についての具体的な解答
ありがとうございました。よく理解出来ました。実は仕事でプログラム言語を
使わなければならなくなり、まだまだ初心者ですが、頑張っていこうと思っています。
今、現在のプログラムは低水準の方を使用しているので、より理解力を深めることが出来るようにしていきたいと思います。本当にありがとうございました。
No.3
- 回答日時:
「戻り値」というか「返却値」は、関数から呼び出し元に戻るときに返される「値」のことです。
関数の宣言では、値ではなく「型」すなわち「返却値型」を指定します。今回の例では、左端の「int」がそれにあたります。例えば、read関数の定義が
int read (int fhandle, void *buffer, unsigned int count)
{
...
return 10;
}
のようになっていれば、最初の行の左端の「int」が「返却値型」であり、下から2行目の「10」が「返却値(=戻り値)」です。
呼び出し元で、
result = read(handle, buf, 10);
のような使い方をしていた場合、「返却値」という値がresultに代入されることになります。要するに、read関数が「返却値」を「返した」わけです。
No.2
- 回答日時:
int read (int fhandle, void *buffer, unsigned int count);
この関数内で
return XXX;
と記載してませんか?
XXXがint型の数値で戻り値です。
例えば
単純にa+bをする関数
int keisan(int a, int b)
{
int sum;
sum = a + b;
return sum;
}
この場合の戻り値は sum = a+bの計算結果(int型)
になります
レス遅れて申し訳ありません。
戻り値がどういったものなのか、土日で調べてみました。
stamkmさんの意見と照らし合わせて理解することが出来ました。
ありがとうございました。
No.1
- 回答日時:
int型の数値
戻り値を返す必要がなければ
int
じゃなく
void
ってなってると思います。
戻り値はvoidでなければ「返す」ものです。
「返さない」のであればvoidです。
例えば、calc()関数が計算を行い、put()関数がcalc()関数を呼び出して計算結果を出力する場合、
put()関数は計算結果をcalc()関数から「返して」もらわないと、出力する事が出来ません。
だからcalc()関数の戻り値としてintなどを指定します。
関数定義の()内のやつは仮引数。
ありがとうございます。では返すと戻り値はほぼ同一
だと考えて良いのでしょうか?
結局read関数の戻り値が何なのか良く分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# (C言語)めちゃくちゃな値になってしまいます。 5 2022/08/13 11:55
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
関数の戻り値について
-
C言語エラーの解決法教えてくだ...
-
ハンドルされていない例外が発...
-
visualstudio C# テキストボッ...
-
512Lや1024L等の「L」について
-
C言語での方向キー入力判定
-
long型の定数の末尾にLを付ける...
-
sshdログの意味
-
マージソートのプログラム
-
関数の呼び出し
-
C言語 プログラミングについて
-
C言語ゲーム製作中 ソース公開
-
警告 ”値が割り当てられていな...
-
C言語初心者です。以下のような...
-
C++の分割コンパイルについて
-
VB6から参照可能なDLLの作成
-
コンパイルすると error C1083 ...
-
C++推奨のデータ型
-
ユーザ定義関数とマクロ関数で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
2重定義って??
-
変数の型を定義しなかった場合...
-
C++でboolにintの値を代入する...
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
ハンドルされていない例外が発...
-
void func( void )について
-
C言語のコンパイルエラー
-
enumについて
-
関数の実体定義にヘッダファイ...
-
C言語 宣言した変数になにも代...
-
C++ クラスをメンバにもつクラ...
-
プログラムの中で別のmainを呼...
-
sshdログの意味
おすすめ情報