標準I/Oライブラリの概要
標準I/Oライブラリを使用する方法は、下位ファイル記述子を使用する方法と同じです.アクセスパスを確立するためにファイルを開く必要があります.標準I/Oライブラリで下位ファイル記述子に対応するストリーム(stream)は、構造体FILEへのポインタです.
プログラムを起動すると、3つのファイルストリームが自動的に開きます.これらはstdin stdout stderrorで、stdioです.hで定義されたものは、それぞれ標準入力標準出力標準エラー出力を表し、下位ファイル記述子0 1 2に対応する.
構造体FILE:(stdio.hで定義)
標準I/Oライブラリでよく使用される関数:
fopen fclose
fread fwrite
fgetc fputc
stdioを通ります.hヘッダファイルの関数はファイルコピーを実現する
1文字ずつコピー
コードは比較的に簡単で、注釈をつけません
2ブロックごとのコピー
プログラムの実行:
TIMEFORMAT=“” time ./copy_stdio
最下位のデータ・ブロックのレプリケーションほど速くはありませんが、一般的なものよりずっと速いです.stdioライブラリはFILE構造で内部バッファを使用しているため、バッファがいっぱいになったときにのみ下位システム呼び出しが行われます.
プログラムを起動すると、3つのファイルストリームが自動的に開きます.これらはstdin stdout stderrorで、stdioです.hで定義されたものは、それぞれ標準入力標準出力標準エラー出力を表し、下位ファイル記述子0 1 2に対応する.
構造体FILE:(stdio.hで定義)
typedef struct
{
short level; //
unsigned flags; //
char fdl; //
unsigned char hold; //
short bsize; //
unsigned char * buffer; //
unsigned char * curp; //
unsigned istemp; //
short tokens; //
}FILE;
標準I/Oライブラリでよく使用される関数:
fopen fclose
fread fwrite
fgetc fputc
stdioを通ります.hヘッダファイルの関数はファイルコピーを実現する
1文字ずつコピー
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE * filein,* fileout;
int num;
filein = fopen("file.in","r");
fileout = fopen("file.out","w");
while((num=fgetc(filein))!=-1)
{
fputc(num,fileout);
}
return 0;
}
コードは比較的に簡単で、注釈をつけません
2ブロックごとのコピー
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE * filein,* fileout;
char block[1024];
int nread;
filein = fopen("file.in","r");
fileout = fopen("file.out","wb");
while((nread=fread(block,sizeof(char),1024,filein))>0)
{
printf("write once");
fwrite(block,sizeof(char),nread,fileout);
}
fclose(filein);
fclose(fileout);
return 0;
}
プログラムの実行:
TIMEFORMAT=“” time ./copy_stdio
最下位のデータ・ブロックのレプリケーションほど速くはありませんが、一般的なものよりずっと速いです.stdioライブラリはFILE構造で内部バッファを使用しているため、バッファがいっぱいになったときにのみ下位システム呼び出しが行われます.