No.3ベストアンサー
- 回答日時:
う~ん……加えると……。
そもそもK&Rの第8章って「UNIXシステムインターフェース」ですよね。
と言うことは環境的にはある程度「UNIX依存」じゃないか、とも思えるのですが。
例えば、p215に次の記述があります。
「次に示す典型的なstdio.hからの抜粋では」
と書いてますね。この「典型的な」stdio.hに問題のOPEN_MAXや_iobがまず定義されているわけですけど……。この「典型」になってるのはオリジナルのUNIXのものですよね?
ちなみに「んじゃあFreeBSDなんかのstdio.hはどうなんだ?」とか思って調べてみたわけですが、次のようになってる模様です。
free bsd stdio.h lang:c:
http://www.google.co.jp/codesearch/p?hl=ja#XAzRy …
これ見る限り、「似たような」コードではありますが……。ザーっと読む限り、K&Rで記述されているOPEN_MAXはFOPEN_MAXになっているようですし、また、_iobは__sFILEになってるんじゃないかな?多分。
つまり、使用している環境/コンパイラによって「変数の名称が違う」んですね。また、僕の使ってるLinuxでのgccのstdio.hも一応見てみたんですが、FreeBSD版と違って若干ゴチャゴチャしてましたが(笑)、やっぱり「違う」わけです。
つまり、「低水準入出力関数で実装する」以上、お使いのコンパイラでのヘッダーファイルの記述がどうなってんのか、熟知する必要があるのではないでしょうか?
ないしは、UNIX使ってないんでしたら、この章は飛ばしても大丈夫なのかな、とかちょっと思いました(笑)。
いろいろと言葉足らずなところがありまして
質問の趣旨をあまり伝えることができなくてすいません。
ですが、驚くべきことに質問者さんは
私が知りたかった答え的な回答ドンピシャでしたww
この回答を見て
私の使ってるlinuxではstdio.hの中にはほとんど宣言がないので
いろいろ探してみたところ、
bits/stdio_lim.hにFOPEN_MAX 16があり
libio.hにIO_FILE_
という構造体が宣言されているんで
あまり自信ないですがたぶんこれがファイルのデータを格納する構造体だと思います。
ありがとうございました。
No.2
- 回答日時:
_iodは_iobの誤記かな。
_iobもOPEN_MAXもあなたが定義するものですよ。8.5の最初のプログラムリスト(※1)に
#define OPEN_MAX 20
と
extern FILE _iob[OPEN_MAX];
という行がありませんか? ここで定義ないしは宣言を行っています。
FILE *fopen(char *name, char *mode)のプログラムリストは※1が必要なのではないでしょうかね。私はここら辺は実習していないので正確にはわかりません。ただ、extern FILE _iob[OPEN_MAX]というのは変数宣言であって変数定義ではないので定義はまた別個にやってあげないとセグメンテーションフォールトが発生するかも知れません。
蛇足になりますが、もしあなたが必要にせまられてしょうがなしにこの本を読んでいるのではなく、C言語を本当に理解したいのでこの本で勉強をしているのであれば、1.10 外部変数と通用範囲、5章全部、6章全部をもう一度熟読される事をお勧めします。
また、付録A 参照マニュアルというのがあれば、それは一生使えます。Cウィザードになってもここはいつでも役に立つので何度でも読み返されると良いでしょう。
すみません_iodは誤記です。
え??
…これって/include/stdio.hの抜粋じゃないんですか?
まぁ、確かに打ち込めば話は早いですね
ですが、私としては、ライブラリの勉強がしたいのでstdio.hを見て探しました。
gccのstdio.hだと、変数名とか、宣言の場所がこの本と違うんで分からないんです。
たぶん、この本が出版されてからかなり経ってるので標準ライブラリの形が変わってしまってるんでしょうね。
その上で、現在ではどこにファイルのデータを扱ってる構造体宣言があるのかを聞きたかったのですが
言葉足らずだったみたいです
また出直します
ご回答ありがとうございました。
No.1
- 回答日時:
エラーになったソースを補足してください。
補足する際は、手で打ち込むのではなく、元のソースをコピーして貼り付けてください。手で打ち込むときに、打ち込み間違いがあり、そのため、期待した回答が得られない場合があります。
また、そのソースをコンパイルした、OS、コンパイラの名称も必ず補足してください。(例1windows-xp,visual studio2008,例2linux,gcc等)
いろいろと不足があったみたいですいません。
今度からコードはコピペします。
一応、OSはlinuxでコンパイラはそれについてたのだから
gccだと思います。(少なくともborlandとwindowsのvisual...じゃないです)
ソースコードの方が学校にあって今はないので
頑張って自分で探します。
ご回答ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# エラー: ‘inval’ の記憶サイズが不明です。 union semun inival; というエ 2 2023/01/16 22:04
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(教育・科学・学問) 通信高三で中一レベルの英語力しかありません。 1週間まえから武田塾に入りました。 今から京都文教又は 9 2022/08/13 19:10
- 高校受験 高校受験まで2週間/未だに理社が平均点以下 理社の点数が未だに平均点以下から上がらず困っています… 1 2023/01/29 18:24
- 予備校・塾・家庭教師 武田塾について。通信制高校3年です。 中学から含め全く勉強しませんでした。 高校は母も病気気味だった 2 2022/08/11 20:46
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
Eclipseの環境設定について
-
C++でアボート(Abort)で処理が...
-
io.hをincludeするとそのような...
-
PICでLEDの点滅について
-
fortranでのNaNについて
-
C++ で、「)」が必要 というエ...
-
volatile修飾について
-
ABAQUS ユーザーサブルーチン...
-
isnanの取り扱いについて
-
C言語のコンパイラ
-
プログラミング言語C第2版 カ...
-
あるプログラムのコマンドライ...
-
Excelに埋め込んだVBAのプログ...
-
VBAにてメール作成した際、一部...
-
VBAで仕様書は書きますか?
-
アプリのプログラムを見るには...
-
排他的論理和 BCC(水平パリテ...
-
変数の値が勝手に変化する原因
-
EXCELなどで「返す」という表現
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
CPUが16bitでも32bitOSでコンパ...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
コンパイルできない
-
io.hをincludeするとそのような...
-
変数(関数)名の頭に_
-
コンパイラについて
-
fortranでのNaNについて
-
ABAQUS ユーザーサブルーチン...
-
volatile修飾について
-
Visual C++とVisual C++.NETの違い
-
コンパイラの制限 : ヒープの領...
-
Eclipseの環境設定について
-
graph.hがincludeできない
-
Delphiの逆コンパイル
-
プリコンパイラとは?
-
sprintfを用いたフォーマット文...
-
PICマイコンによる乱数の表示に...
-
C++の Unhandled Exceptionにつ...
おすすめ情報