質問するログイン新規登録

回答編集履歴

1

追記

2018/09/04 03:11

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -3,4 +3,40 @@
3
3
  > 標準C言語のストリームの定義の解釈の仕方が分からない…
4
4
 
5
5
  そもそもC言語にストリームの概念はないですよ。
6
- テキスト・ファイルとバイナリ・ファイルの差はありますが、これはWindowsがこの2つを(悲しいかな)厳密に区別するから、それに引きずられているだけかも知れません。
6
+ テキスト・ファイルとバイナリ・ファイルの差はありますが、これはWindowsがこの2つを(悲しいかな)厳密に区別するから、それに引きずられているだけかも知れません。
7
+
8
+ ---
9
+ 【09/04追記】
10
+ [規格書(の無料で見れるドラフト)](https://web.cs.dal.ca/~vlado/pl/C_Standard_2011-n1570.pdf)をみてみました。
11
+ 316ページ「7.21.2 Streams」に記載されています。
12
+ 規格書にもテキスト・ストリーム、バイナリ・ストリームは定義されていました。位置づけとしてはこれらの条件に該当するものはテキスト・ストリーム、バイナリ・ストリームとしてサポートするというものでしたので、これら以外を許さないという書き方ではなかったです。(質問文にも特にそのような記述があるわけではないので、ここは私の解釈ミスですね。ごめんなさい。)
13
+
14
+ 1. ターミナル、テープ・ドライブ、構造を持つ(フォルダのあるという意味でしょう)ストレージ・デバイスについて、テキスト・ストリームとバイナリ・ストリームを**サポート**するそうです。
15
+ 他の形式を使ってはいけないという記述ではないです。またメモリ・ストリームは含まないようです。
16
+ 2. テキスト・ストリームは要するに、入出力時に改行文字コードを追加/削除するので書いたものと書かれたもの(**読み出されたものではないです**)が1対1対応するとは限らないそうです。そして、書いたものと読み出されたものが一致する条件が3つ書かれてます(質問文の3つと同じ)。
17
+ 「改行文字の直前に空白文字がない。」の記載もありました。行の終わりにスペースを書くこともありますから、一般的なテキスト・エディタで書かれたテキスト・ファイルはこの条件から外れそうです。[BOM](https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF)付きファイルも全部外れますね。
18
+ 3. バイナリ・ストリームは書いたものと読んだものが一致する、ただし、null文字をストリームの最後に付け加えても良いそうです。
19
+ 書いた時にはなかったnull文字が最後に追加されていることがあるという意味ですね。HDDなどのセクタ・サイズに合わせるパディングを意識したものと思われますが、バイナリ・ファイルは書いたときと同じサイズで読み出せることを当てにすることが多いので新鮮な驚きです。
20
+
21
+ 更に記述は続いてますが、議題からは外れると思いますので割愛します。
22
+
23
+ ---
24
+ 以上を踏まえて改めて回答します。
25
+
26
+ > 1:fputc() や fgetc() のように、1つの文字をテキストストリームに読み書させる際は(以下略)
27
+
28
+ 処理系が最終行の終わりに改行文字を要求する場合は、最後に1つの改行文字を出力しておけば定義①内です。
29
+ 処理系がそれを要求しないなら、何をしようと定義①内と思います。
30
+
31
+ > 2:➁の定義における3つの規則は(以下略)
32
+
33
+ これは「③の定義」の間違いでしょうか?
34
+ 書いて読んだ時に同じ値が読み出せると条件を満たすことになります。実際にメディアに書かれる内容がそれと一致する必要はありません。
35
+
36
+ > 3:バイナリストリームは、テキストストリームと違い文字の変換などは行わないですよね?
37
+ (改行文字の変換は行われないなど?)
38
+
39
+ その通りですね。
40
+ 書いて読んで一致ですから、通信デバイスはバイナリ・ストリームの条件を満たさないと思います。
41
+
42
+ ただ、私が間違っている可能性があります。もしかすると相手が書いて自分が読んで一致する場合に条件を満たすかもしれません。(通信相手が同じ処理系であることが条件にありますので、該当しない場面がかなり多いとは思いますが。)