エラー関連

アサート処理

assert.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <stdio.h>
#include <assert.h>

int divide(int num, int d);

int main(void){

  printf( "%d\n", divide(100, 0) );

  return 0;
}

int divide(int num, int d){
  assert(d != 0);
  return num / d;
}

assert.c の実行結果は:

[cactus:~/code_c/refer]% ./assert
Assertion failed: (d != 0), function divide, file assert.c, line 14.
Abort

エラー番号

errno.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
/*
  errno.h [errno, strerror]

*/

#include <stdio.h>
#include <errno.h>

int main(void){
  FILE *fp = fopen("error.aaa", "r");

  if(fp == NULL)
    printf("%d\n", errno);
  else
    fclose(fp);

  return 0;
}

errno.c の実行結果は:

[cactus:~/code_c/refer]% ./errno
2

エラーメッセージの表示

perror.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
/*
  stdio.h [perror]
  書式: void perror(const char *s)
  機能: 標準エラー出力 (画面) にエラーメッセージを表示
        (エラーメッセージはエラー番号に対応した文字列)
  引数: const char *s: エラーメッセージに追加表示する文字列
        NULL を指定すると, エラーメッセージのみ表示する.
  戻り値: なし
*/

#include <stdio.h>

int main(void){
  FILE *fp1;
  FILE *fp2;
  char *fname1 = "unknown.txt";
  char *fname2 = "test.txt";

  fp1 = fopen(fname1, "r");
  if(fp1 == NULL)
    perror(NULL);

  fp2 = fopen(fname2, "r");
  if(fp2 == NULL)
    return -1;

  fputc('A', fp2);
  perror("A を出力しようとした");

  fclose(fp2);
  return 0;
}

perror.c の実行結果は:

[cactus:~/code_c/refer]% ./perror
No such file or directory
A を出力しようとした: Bad file descriptor

エラー番号に応じた文字列取得

strerror.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
  string.h [strerror]
  書式: char* strerror(int errnum)
  機能: エラー番号に応じた文字列の取得
  引数: int errnum: エラー番号
  戻り値: エラー番号に応じた文字列のポインタを返す.
*/

/*
  エラー番号とエラーメッセージの対応表
  00 No error
  01 Operation not permitted
  02 No such file or directory
  03 No such process
  04 Interrupted function call
  05 Input/output error
  06 No such device or address
  07 Arg list too long
  08 Exec format error
  09 Bad file descriptor
  10 No child processes
  11 Resource temporarily unavailable
  12 Not enough space
  13 Permission denied
  14 Bad address
  15 Unknown error
  16 Resource device
  17 File exists
  18 Improper link
  19 No such device
  20 Not a directory
  21 Is a directory
  22 Invalid argument
  23 Too many open files in system
  24 Too many open files
  25 Inappropriate I/O control operation
  26 Unknown error
  27 File too large
  28 No space left on device
  29 Invalid seek
  30 Read-only file system
  31 Too many links
  32 Broken pipe
  33 Domain error
  34 Result too large
  35 Unknown error
  36 Resource deadlock avoided
  37 Unknown error
  38 Filename too long
  39 No locks available
  40 Function not implemented
  41 Directory not empty
  42 Illegal byte sequence
  43 Unknown error
  44 Unknown error
  45 Unknown error
  46 Unknown error
  47 Unknown error
  48 Unknown error
  49 Unknown error
*/

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(void){
  FILE *fp = fopen("error.aaa", "r");

  if(fp == NULL)
    printf( "%s\n", strerror(errno) );
  else
    fclose(fp);

  return 0;
}

strerror.c の実行結果は:

[cactus:~/code_c/refer]% ./strerror
No such file or directory

Table Of Contents

Previous topic

データ型

Next topic

プログラムの終了