ファイルオープン

ファイルを開く

fopen.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
  stdio.h [fopen]

  書式: FILE *fopen(const char *filename, const char *mode)
  機能: ファイルを開く
  引数: const char *filename: 開くファイル名を指定
        const char *mode: ファイルオーポンのモード
  戻り値: 成功すると, ファイル (ストリーム) のポインタを返し,
          失敗すると, NULL を返す.
*/

/*
  FILE 構造体
  機能: 現在のファイルポインタや, バッファサイズ, ファイルの状態を
        格納
  宣言:
  typedef struct{
  unsigned char *curp; // Current active pointer
  unsigned char *buffer; // Data transfer buffer
  int level; // fill/empty level of buffer
  int bsize; // Buffer size
  unsigned short istemp; // Temporary file indictator
  unsigned short flags; // File status flags
  wchar_t hold; // Ungetc char if no buffer
  char fd; // File descriptor
  unsigned char token; // Used for validity checking
  }FILE;
*/

#include <stdio.h>

int main(void){

  FILE *fp;
  char *fname = "test.txt";

  fp = fopen(fname, "r");
  if(fp == NULL){
    printf("%s ファイルが開けない\n", fname);
    return 0;
  }else{
    printf("%s ファイルを開いた\n", fname);
  }
  
  fclose(fp);
  
  return 0;
}

fopen.c の実行結果は:

[cactus:~/code_c/refer]% ./fopen
test.txt ファイルを開いた

ファイルを閉じる

fclose.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
  stdio.h [fclose]

  書式:int fclose(FILE *fp)
  機能: ファイルを閉じる
  引数: FILE *fp: fopen() で取得したファイルポインタ
  戻り値: 成功すると, 0 を返し,
          失敗すると, EOF(-1) を返す.
*/

#include <stdio.h>

int main(void){

  FILE *fp;
  char *fname = "test.txt";

  fp = fopen(fname, "r");
  if(fp == NULL){
    printf("%s ファイルが開けない\n", fname);
    return 0;
  }else{
    printf("%s ファイルを開いた\n", fname);
  }
  
  fclose(fp);
  
  return 0;
}

fclose.c の実行結果は:

[cactus:~/code_c/refer]% ./fclose
test.txt ファイルを開いた

ファイルオープンのモード

fmode.c

/*
  
  ファイルを開くには fopen() 関数のモード引数 (第 2 引数) を,
  読み取り用の "r" に設定したが, 書き込み場合や, 追加する場合
  のオープンモードを見てみる.

  オープンモードの文字列は最大 3 文字で構成される.

  第 1 文字目群:
  ----------------------------------------
  r: [Read] ファイルを読み取りモード
     ファイルがない場合は, NULL を返す
  ----------------------------------------
  w: [Write] ファイルを書き込みモード
     ファイルがない場合は, 新規作成する
     ファイルがある場合は, 元ファイルの
     内容を破棄して書き込む
  ----------------------------------------
  a: [Append] ファイルを追加書き込みモード
     ファイルがない場合は, 新規作成する
     ファイルがある場合は, 終端に追加する
  ----------------------------------------

  第 2 文字目群と 第 3 文字目群
  ----------------------------------------
  b: [Binary] バイナリモード
     テキストファイルではなく, バイナリとし
     て開く
  +: [Plus] 複合モード
     第 1 文字目群に, 対となるモードを追加
     し読み書きを両方できるようにする
  -----------------------------------------
  第 2 文字目と 第 3 文字目は, 入れ替えても
  大丈夫だ!!
  
  -------------------
  テキストモードでは,
  ---------------------------------------------------------------------------
  ファイル読み取り: 改行記号 CR + LF[\r\n](0x0D, 0x0A) を LF[\n](0x0A) に変換
  ファイル書き込み: 改行記号 LF[\n](0x0A) を CR + LF[\r\n](0x0D, 0x0A) に変換
  ---------------------------------------------------------------------------

  -------------------
  バイナリモードでは,
  --------------------------------------
  読み書き両方とも変更せずに読み書きする
  --------------------------------------

  --------------------------
  オープンモードの全パターン
  -----------------------------------------------------
  "r": 読み取りモード
  -----------------------------------------------------
  "w": 書き込みモード
  -----------------------------------------------------
  "a": 追加書き込みモード
  -----------------------------------------------------
  "rb": バイナリ読み取りモード
  -----------------------------------------------------
  "wb": バイナリ書き込みモード
  -----------------------------------------------------
  "ab": バイナリ追加書き込みモード
  -----------------------------------------------------
  "r+": 読み取り + 書き込みモード
  -----------------------------------------------------
  "w+": 書き込み + 読み取りモード
  -----------------------------------------------------
  "a+": 追加書き込み + 読み取りモード
  -----------------------------------------------------
  "r+b" or "rb+": バイナリ読み取り + 書き込みモード
  -----------------------------------------------------
  "w+b" or "wb+": バイナリ書き込み + 読み取りモード
  -----------------------------------------------------
  "a+b" or "ab+": バイナリ追加書き込み + 読み取りモード
  -----------------------------------------------------

*/

標準入出力について

stdoutput.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/*
  標準入力         (stdin)  = キーボード
  標準出力         (stdout) = ディスプレイ
  標準エラー出力   (stderr) = ディスプレイ
  標準プリンタ出力 (stdprn) = プリンタ
  標準補助入出力   (stdaux) = シリアル通信など
*/

#include <stdio.h>

int main(void){
  char *str = "Hello";
  fprintf(stdout,"%s World!!\n", str);
  return 0;
}

stdoutput.c の実行結果は:

[cactus:~/code_c/refer]% ./stdoutput
Hello World!!