C言語関数:fopen





C言語のページでは、次の内容を解説しております。
C言語の入門講座  C言語の文法を中心に、基本的な関数などの解説をしています。
C言語ケーススタディ  C言語での実践的なプログラミングについて解説をしています。
C言語の関数リファレンス  C言語で用意されている関数を解説しています。
C言語で3次元動画プログラム  C言語で3次元タートルグラフィックを使用した3次元の動画プログラムの作成例です。
C言語の検定試験  C言語の文法に関する検定試験を実施することができます。
C言語でゲーム作成  C言語を使用したゲームの作り方を解説したページも用意しております。


■fopen
ファイルのオープン

【分類】
標準入出力/ストリーム関数

【書式】
FILE *fopen(const char *filename, const char *mode);

【パラメータの型と説明】
パラメータ説明
const char *filenameファイル名(パス名)
const char *modeモード

【機能説明】
filenameで指定したファイルをmodeで指定したモードでオープンし、ストリームと結び付けます。
ファイルのオープンに成功したときは結び付けたストリームを、失敗したときはNULLを返します。
modeは、以下のtype1のうちどれか1つと、必要であればtype2のうちどれか1つをtype1の後ろに指定します。
type1はrがついているものは読み込み、wがついているものは書き込み、aがついているものはファイルの最後から書き込みをするために用います。

type1
  機能 ファイルが存在しないとき
r 読み込み可 エラー
w 書き込み可(既存なら大きさを0にする) 新たに作る
a ファイルの最後から追加(書き込み可) 新たに作る
r+ 読み書き可 エラー
w+ 読み書き可(既存なら大きさを0にする) 新たに作る
a+ ファイルの最後から追加(読み書き可) 新たに作る

type2
  機能
t テキストモードでオープン
b バイナリモードでオープン

例)
"rt" → 読み込み可、テキストモード
"a+b" → ファイルの最後から追加、バイナリモード

注)テキストモードを指定したときの注意
入力時に'\r' を読み飛ばし、CTRL+Z(0x1a) が現れた時点でファイルが終了しているとみなします。 また、出力時に '\n' を '\r' '\n' の2文字に変換します。

同一のストリームに対して読み込みと書き込みの両方を行うときは、読み込みから書き込みに移る前にfseekまたはrewindを実行しなければなりません。書き込みから読み込みに移るときも同様です。

同様にファイル読み書きのためのオープンにはopen()関数があります。 open()関数は、read()/write()関数などの下位レベル(バッファリングを行いません)関数群のためのオープンに使用します。 一方、open関数はread()/write()/lseek()関数などのためのオープンに使用します。 ファイルへの操作が終了したらfclose()関数にてクローズします(open()関数の場合は、close()関数)
コンパイラにもよると思いますが、fopen()関数は内部でopen()関数を呼び出している場合がほとんどだと思います。 さらにopen()関数は内部でCreateFile()という関数(システムコール)を呼び出しています(Windowsの場合)。
fopen()関数が内部でopen()関数を呼び出した場合は、以下のようなパラメータになると思います。
        amode                           permiss
r       O_RDONLY                        -
w       O_CREAT | O_WRONLY | O_TRUNC    S_IWRITE
a       O_CREAT | O_WRONLY | O_APPEND   S_IWRITE
r+      O_RDWR                          -
w+      O_RDWR | O_CREAT | O_TRUNC      S_IWRITE | S_IREAD
a+      O_RDWR | O_CREAT | O_APPEND     S_IWRITE | S_IREAD


〜t     テキストモード     oflags |= O_TEXT
〜b     バイナリモード     oflags |= O_BINARY

【参照関数】
fclose
freopen

【使用例】
第14回C言語講座 ファイル読み書き1
C言語ケーススタディ Excelで作ったデータ(CSVファイル)の読み込みプログラム1
C言語ケーススタディ Excelで作ったデータ(CSVファイル)の読み込みプログラム2
C言語ケーススタディ ファイルダンプコマンドの作り方1
C言語ケーススタディ ファイルダンプコマンドの作り方2
C言語ケーススタディ ファイルダンプコマンドの作り方3
C言語ケーススタディ フィルタ処理(大小文字変換)
C言語ケーススタディ フィルタ処理(空白文字を'-'に置換)
C言語ケーススタディ フィルタ処理(空白文字を除去)