C プログラミング言語は、ファイル入出力のための多くの標準ライブラリ関数を提供します。これらの関数は、C 標準ライブラリヘッダー< stdio.h >の大部分を構成しています。[ 1 ]この機能は、 1970 年代初頭にベル研究所のMike Leskによって書かれた「ポータブル I/O パッケージ」に由来し、 [ 2 ]バージョン 7で正式にUnixオペレーティングシステムの一部となりました。[ 3 ]
C言語の入出力機能は、現代の基準からするとかなり低レベルです。C言語では、すべてのファイル操作がバイトストリームに対する操作に抽象化されており、これらのバイトストリームは「入力ストリーム」または「出力ストリーム」のいずれかになります。以前のプログラミング言語とは異なり、C言語はランダムアクセスデータファイルを直接サポートしていません。ファイルの中央にあるレコードを読み取るには、プログラマはストリームを作成し、ファイルの中央にシークしてから、ストリームからバイトを順番に読み取る必要があります。
ファイル入出力のストリームモデルは、C言語自体と同時期に開発されたUnixによって普及しました。現代のオペレーティングシステムの大部分はUnixからストリームを継承しており、C言語ファミリーの多くの言語は、ほとんど変更を加えることなくCのファイル入出力インターフェースを継承しています(例えばPHP)。
このライブラリは、キーボード、プリンタ、端末などの物理デバイスや、システムがサポートするその他の種類のファイルを操作するには、ストリームと呼ばれるものを使用します。ストリームは、これらと統一された方法でやり取りするための抽象化です。すべてのストリームは、関連付けられている物理メディアの個々の特性に関係なく、同様の特性を持っています。[ 4 ]
C ファイルの入出力関数のほとんどは、<stdio.h>(または標準 C 機能を含むがstd名前空間にあるC++ヘッダー) で定義されています。<cstdio>
ヘッダーで定義されている定数には<stdio.h>以下が含まれます。

ヘッダーで定義されている変数には<stdio.h>以下が含まれます。
ヘッダーで定義されているデータ型には<stdio.h>以下が含まれます。
mbstate_t)fpos_t– ファイル内のすべてのバイトの位置と、サポートされているすべてのマルチバイト文字エンコーディングで発生する可能性のあるすべての変換状態を一意に識別できる非配列型size_t– sizeof演算子の結果の型である符号なし整数型。POSIX標準では、<stdio.h>基本定義においていくつかの拡張機能が定義されており、その中にはreadlineメモリを割り当てる関数、FILEオブジェクトとファイルディスクリプタ間のリンクを確立する関数fileno、およびメモリ内バッファを参照するオブジェクトを作成するための関数群が含まれています。[ 5 ]fdopenFILE
以下のCプログラムは、 myfile.binという名前のバイナリファイルを開き、そこから5バイトを読み込み、その後ファイルを閉じます。
#include <stdio.h> #include <stdlib.h>int main ( void ) { const char file_name [] = "myfile.bin" ;char buffer [ 5 ]; FILE * fp = fopen ( file_name , "rb" );if ( fp == NULL ) { fprintf ( stderr , "ファイル% sを開けませんでした! \n " , file_name ); return EXIT_FAILURE ; }size_t len = fread ( buffer , 1 , sizeof buffer , fp ); if ( len < sizeof buffer ) { if ( ferror ( fp )) { fprintf ( stderr , "Read error in \" %s \"\n " , file_name ); } else if ( feof ( fp )) { fprintf ( stderr , "Unexpected end of file in \" %s \"\n " , file_name ); } fclose ( fp ); return EXIT_FAILURE ; }fclose ( fp );printf ( "読み取ったバイトは次のとおりです:" ); for ( size_t i = 0 ; i < len ; ++ i ) { printf ( "%02X" , ( unsigned char ) buffer [ i ]); } putchar ( '\n' );return EXIT_SUCCESS ; }の代替手段がいくつか<stdio.h>開発されています。その中には、 C++ 標準ライブラリの一部であるC++ I/Oヘッダー<iostream>とがあります。ISO C++ では依然としての機能が必要であり、それはヘッダー の下にあります。<print><stdio.h><cstdio>
その他の代替案としては、AT&T Bell LaboratoriesのSfio [ 6 ] (A Safe/Fast I/O Library) ライブラリがあります。1991 年に導入されたこのライブラリは、設計における矛盾、安全でない慣行、非効率性を回避することを目的としていました。その機能の一つとして、ストリームにコールバック関数を挿入して、ストリームから読み取られたデータやストリームに書き込まれたデータの処理をカスタマイズできる機能があります。[ 7 ] [ 8 ] 1997 年に外部にリリースされ、最後の公式安定版リリースは2005 年 2 月 1 日でした。 [ 9 ] [ 10 ] [ 11 ]<stdio.h>
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク){{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク)