■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言語ケーススタディ フィルタ処理(空白文字を除去)
|
|
C言語でAndroidアプリを作成することができます。 Android NDK(Javaで作成する場合はAndroid SDK)を使用します。
普段使っているスマホでのデバッグは心配なので安価な タブレットがお勧めです。Nexus 7ならNFCのテストも可能です。
|