hdl = open("filename", O_CREAT など);
ここで、hdlとはint型の整数です。ファイルハンドルと言って この後、ファイルの読み書きの時必要です。 「O_CREATなど」とあるのは、fcntl.hで 次のように定義されています。
必要なものをOR(|)で結んでやればOKです。これは、前章で 少しだけ関係のあることを書いています。 それと、注意しなくてはいけないのは、VC++ではこの関数の 前にアンダースコアがついています。これは、低水準なので なるべく別の関数(高水準の)を使って下さいという意味です。 でも気にせず使ってしまいましょう。また、_open()とせずに open()としても、エラーにはなりません。 似たようなものにgetch()があります。これもアンダスコア付き 関数ですがgetch()のまま使っても問題ありません。 O_APPENDなどの定数類もアンダスコアがついています。 取ってしまっても差し支えありません#define _O_RDONLY 0x0000 /* open for reading only */ #define _O_WRONLY 0x0001 /* open for writing only */ #define _O_RDWR 0x0002 /* open for reading and writing */ #define _O_APPEND 0x0008 /* writes done at eof */ #define _O_CREAT 0x0100 /* create and open file */ #define _O_TRUNC 0x0200 /* open and truncate */ #define _O_EXCL 0x0400 /* open only if file doesn't already exist */ #define _O_TEXT 0x4000 /* file mode is text (translated) */ #define _O_BINARY 0x8000 /* file mode is binary (untranslated) */
では、さっそく氏名と、成績(得点)をファイルに書き込む プログラムを作ってみましょう。openしたら、write関数で ファイルに書き込むだけです。終わったら当然closeします。 それと、低水準ファイル入出力を行うには、インクルードする ファイルがいろいろあるので注意して下さい。
#include <stdio.h> #include <io.h> #include <stdlib.h> #include <fcntl.h> #include <sys\types.h> #include <sys\stat.h> int main(void) { int hdl; char name[32], point[6], fname[16]; printf("ファイル名="); gets(fname); hdl = _open(fname, O_CREAT | O_WRONLY | O_APPEND); printf("Eで終了します\n"); while(1) { memset(name, '\0', 32); memset(point, '\0', 6); printf("氏名="); gets(name); if (strcmp(name, "E") == 0) break; printf("得点="); gets(point); _write(hdl, name, 31); _write(hdl, point, 5); } _close(hdl); return 0; }
memsetでnameやpointの配列の要素をすべてヌル文字で埋めて、 ファイルにゴミを書き込まないようにしています。(memsetはあとの章で出てくる予定)
別にどうということはありませんね。次回は、このファイルを
読み出すプログラムを作ります。
Update Feb/17/1997 By Y.Kumei