プログラムの終了

プログラムの正常終了

exit.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
/*
  stdlib.h [exit]
  書式: void exit(int status)
  機能: プログラムを正常終了させる
  引数: int status: EXIT_SUCCESS(0) を指定すると成功を示し,
        EXIT_FAILURE(1) を指定すると処理が失敗したことを示す.
  戻り値: なし
*/

#include <stdio.h>
#include <stdlib.h>

int main(void){
  FILE *fp;
  char *fname = "test.txt";
  fpos_t pos;

  fp = fopen(fname, "rb");
  if(fp == NULL){
    printf( "%s ファイルが開けない\n", fname);
    exit(1);
  }

  fseek(fp, 0, SEEK_END);
  fgetpos(fp, &pos);
  printf("ファイルサイズ: %d\n", (int)pos);

  fclose(fp);
  
  return 0;
}

exit.c の実行結果は:

[cactus:~/code_c/refer]% ./exit
ファイルサイズ: 17

プログラムの異常終了

abort.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
/*
  stdlib.h [abort]
  書式: void abort(void)
  機能: プログラムの異常終了
  引数: なし
  戻り値: なし
*/

/*
  none.txt ファイルがない状態で, ファイルオープン
  が失敗した際に, abort() でプログラムを終了させ
  ている.
*/

#include <stdio.h>
#include <stdlib.h>

int main(void){
  FILE *fp;
  char *fname = "none.txt";
  fpos_t pos;

  fp = fopen(fname, "rb");
  if(fp == NULL){
    printf( "%s ファイルが開けない\n", fname);
    abort();
  }

  fseek(fp, 0, SEEK_END);
  fgetpos(fp, &pos);
  printf("ファイルサイズ: %d\n", (int)pos);

  fclose(fp);
  
  return 0;
}

abort.c の実行結果は:

[cactus:~/code_c/refer]% ./abort
none.txt ファイルが開けない
Abort

終了時に呼ばれる関数登録

atexit.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
/*
  stdlib.h [atexit]
  書式: int atexit( void(*func)(void) )
  機能: プログラムの終了時に呼ばれる関数を登録する
  引数: void(*func)(void): 登録する関数ポインタ
  戻り値: 成功すると 0 を返し,
          失敗すると 0 以外を返す.
*/

/*
 func1, func2, func3 と登録したので,
 逆順で終了時に呼ばれるわけ.
*/

#include <stdio.h>
#include <stdlib.h>

void func1(void);
void func2(void);
void func3(void);

int main(void){

  atexit(func1);
  atexit(func2);
  atexit(func3);

  printf("Enterキーを押すとプログラムを終了する\n");
  getchar();

  return 0;
}

void func1(void){
  printf("終了中...func1\n");
}

void func2(void){
  printf("終了中...func2\n");
}

void func3(void){
  printf("終了中...func3\n");
}

atexit.c の実行結果は:

[cactus:~/code_c/refer]% ./atexit
Enterキーを押すとプログラムを終了する

終了中...func3
終了中...func2
終了中...func1

Table Of Contents

Previous topic

エラー関連

Next topic

その他