ホーム » スタッフ » 斉藤徹 » C言語とファイル操作(OSの違い)

2013年7月
« 6月   8月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

C言語とファイル操作(OSの違い)

前回説明不足の点を補うために、全部座学で講義の予定であったが、 ファイル操作は演習を交えながらの方が効果的なので、 前半説明・後半演習とする。

ファイル操作でのOSの違い

C言語のファイル操作での、バイナリモードとテキストモードの違いを説明する。

OSの成り立ちの違いから、文字コードと機器の動きには違いがある。 特に、\n(行送り) , \r(復改) , \f(ページ送り) といった制御コードは違っている。

Windowsでは、行末文字は、"\r\n" , unix では"\n" , 古いMacOSでは"\r"と 違っている。このため、unix で printf( "Hello\n" ) ; といった処理が、 他のOSでも同じように動かすために、 Windows では、出力時には"\n"を"\r\n"に書き換えて出力し、 入力時には"\r\n"を"\n"に置き換えて入力する。 こういった、行末文字の置き換えをしながら入力するモードは、テキストモード と呼ばれる。 これに対し、記録されているデータの2進数データを扱っているときに、 上記のような変換が行われると、"\r(0x0D)"が消えたり(あるいは想定外に混入)してしまう。 こういったデータを扱う場合には、バイナリモードを使う。

これ以外にも、OSの違いによりデータがおかしくなる事例ということで、 日本語文字コードについても紹介する。よく使われてきた文字コードは、 JISコードは、文字種が変更されるときに、ここから後の文字コードは何…といった情報を 付加する方式。Shift-JISは、パソコン(Windows)で広く利用されている文字コード。 ただし2byteの漢字1文字の1byte目、2byte目の判別が面倒。この改良として、 EUC-JPといった文字コードがある。 しかし、最近では1つのファイルの中に、日本語・中国語・アラビア語といったような 複数の言語が混ざる場合が増えてきたため、"Unicode"という方式を使うのが主流となってきた。 この方式では、基本的にすべての文字=2byteで扱ったりする。 しかし、ファイルに保存するときに効率が良くなるように、"UTF-8"といった保存形式をとる。

ファイル入出力の課題

fopen,fscanf,fprintf,fclose の理解をしてもらうために、 (1)名前と3科目の成績のファイル上のデータで、各人の平均点をファイルに出力、 (2)名前と身長体重で、各人のBMI値をファイルに出力… の課題に取り組んでもらう。

課題途中で、行データの読み込みで混乱が見られたので、 ファイルポインタの説明と、 scanf("%s%d",…) といった入力時に、各項目の読み込み前に空白スキップ処理が 行われることを説明する。