C言語は、UNIXの記述言語であることは基本の基本です。
従って、UNIXとCプログラムとのインタフェース用に作らた入出力関数が、他のCコンパイラにも採用されています。
通常のCプログラムでは、プログラムを実行する時に、標準入力(stdin)、標準出力(stdout)、標準エラー(stderr)出力の3つのファイルが自動的にオープンされ、それぞれにファイルポインタが用意されます。
/* C program */
#include "stdio.h"
main ()
{
FILE *fp;
.....
scanf(...); /* stdin */
.....
printf(...); /* stdout */
.....
fprintf(stderr, ...); /* stderr */
}
stdio.hには、Cプログラムに標準入出力機能を持たせるための入出力関数関するマクロ型、定数が定義されています。
標準入出力を介さない場合は、
FILE *fp, *fopen();
fp = fopen(ファイル名, 読み書きモード);
を宣言する必要があります。
FILEは、*fp, *fopen()がポインタとして指すデータがFILE型であることを意味します。
Cプログラムでは、ファイルを識別する時に高水準入出力ではファイル・ポインタ、低水準入出力ではファイル識別子(file descriptor)を用います。
高水準入出力関数:fopen(), fread(), fwrite(), fclose(), printf(), scanf(), Getchar(), Putchar(), Getc(), Putc(), strcat(), strcpy(), strlen(), strcmp(), Isalpha(), Isdigit(), Isupper(), Isspace(), tolower(), toupper() 等
低水準入出力関数:open(), close(), create(), write(), read(), lseek()、perror()
*********************************
高水準入出力関数は、OSに依存しません。シーケンシャル・アクセスができる。
文字単位で順番に読み書き
== プログラム例==
char C;
...
getc(fp);
fp:ファイル・ポインタ
低水準入出力関数は、OSに依存します。シーケンシャル・アクセスができるし、ランダム・アクセスも可能です。
複数の文字を1つの単位(nバイト/レコード)にして、任意の位置からでデータの読み書きが可能
== プログラム例==
char buff[128];
...
read(fp, buff, 128);
fp:ファイル記述子
【参考記事】
【参照記事】
https://ameblo.jp/kissam59/entry-12574089263.html
https://ameblo.jp/kissam59/entry-12562689157.html