この章の目次にもどる
前頁:1.7 bstdio.h にもどる
次頁:1.9 bstring.h にすすむ

1.8 bstdlib.h

標準的な C 言語の <stdlib.h> に相当する関数ライブラリである。

exit
 
プログラム終了

【形式】

void    exit(int status)

【パラメータ】

int status  終了ステータス(環境へ渡すエラーコード)

【リターン値】

なし

【解説】

プログラムを正常終了する。

abort と異なり、 バッファのフラッシュ、ファイルのクローズ、 割り当てメモリの解放、などのルーチンを実行する。

呼び出し元には復帰しない。

【参照】

abort()

abort
 
プログラム終了

【形式】

void    abort(void)

【パラメータ】

なし

【リターン値】

なし

【解説】

プログラムを即時終了する。

重大で回復不可能なトラブルが発生したとき、プログラムから抜け出すために使用する。

呼び出し元には復帰しない。

【参照】

exit()


atexit
 
プログラム終了時実行関数の登録

【形式】

int atexit(void (*func)(void))

【パラメータ】

void (*func)(void)  登録する関数へのポインタ

【リターン値】

= 0    関数の登録に成功した
≠ 0    関数の登録に失敗した

【解説】

プログラムを終了する際に実行する関数を登録する。

登録した関数はプログラムが正常終了した場合に実行される。 つまり exit() を呼ぶか main() が制御を返したときである。 その関数はプログラム終了の際の通常必要な処理以外にさらに必要な後始末をする。

atexit() は最低 32 個 ( 個数は処理系の定義に依存する ) の関数を登録できる。実行順序は登録順序の逆順である。

【参照】

abort()

atoi
 
文字列の整数への変換

【形式】

int atoi(const char *str)

【パラメータ】

const char  *str    変換対象文字列へのポインタ

【リターン値】

整数値

【解説】

str で指定した文字列の先頭から 10 進数値を意味する部分までを int 型に変換した値を返す。

str は符号が付く場合があり、 任意個の数字を含む。また文字列の始めにある空白を無視する。 最初の符号文字を除いて数字以外の文字を読み込んだ段階で走査を終了する。

変換結果が表現不能な文字列 str が指定された場合の結果は未定義である。

【参照】

atol()

atol
 
文字列のlongへの変換

【形式】

long    atol(const char *str)

【パラメータ】

const char  *str    変換対象文字列へのポインタ

【リターン値】

長整数値

【解説】

str で指定した文字列の先頭から 10 進数値を意味する部分までを long 型に変換した値を返す。

str は符号が付く場合があり、 任意個の数字を含む。また文字列の始めにある空白を無視する。 最初の符号文字を除いて数字以外の文字を読み込んだ段階で走査を終了する。

変換結果が表現不能な文字列 str が指定された場合の結果は未定義である。

【参照】

atoi()


strtol
 
文字列の整数への変換

【形式】

long    strtol(const char *str, char **tail, int radix)

【パラメータ】

const char *str     変換対象文字列へのポインタ
char       **tail   解釈終了位置(アドレス)を格納するポインタ変数
int         radix   基数

【リターン値】

= 0         数値構成ができなかった
= LONG_MAX  結果数値が表現範囲を超えた(最大値より大きい)
= LONG_MIN  結果数値が表現範囲を超えた(最小値より小さい)
その他      長整数値(変換結果)

【解説】

str が指す文字列により示された値を long に変換した結果の値を返す。

strtol()str の指す文字列を読み込み、 開始部・本体・末尾部の 3 つの部分に分ける。

開始部は文字列先頭の空白文字類である。

本体は符号文字、数字または基数指定 radix によって数字として読み込まれることになる文字から構成される。 NULL 文字を検出した時点、 または基数指定 radix によって設定された数字以外の文字を検出した時点で本体は終了する。

末尾部は本体終了直後から NULL 文字までである。

strtol() は開始部を無視し、 本体を long 型数値に変換し、 NULL でない tail に末尾部先頭へのポインタを格納する。

□整数文字列の形式

  1. radix が 0 の場合
    8, 10, 16 進整数定数とみなす。
     8進定数"0177", "+077"
    10進定数"123", "-256"
    16進定数"0x1d8c", "0X2C7B"
  2. radix が 1 の場合
    0 のみ有効。
  3. radix が 2 〜 36 の場合
    radix を基数とする英数字が有効となる。
    英字 A 〜 Z 及び a 〜 z は 10 〜 35 に割り当てられる。
    符号は認識されるが、整数接尾後 ( u,U,l,L ) は認識不能である。
    radix が 16 の場合
        [+/-][0x/0X][数字文字列]
    
    と記述しても良い。

【参照】

strtoul()


strtoul
 
文字列の非負整数への変換

【形式】

unsigned long strtoul(const char *str, char **tail, int radix)

【パラメータ】

const char   *str     変換対象文字列
char       **tail     解釈終了時の文字を指すポインタ
int         radix     基数

【リターン値】

= 0         数値構成ができなかった
= LONG_MAX  結果数値が表現範囲を超えた(最大値より大きい)
= LONG_MIN  結果数値が表現範囲を超えた(最小値より小さい)
その他      長整数値

【解説】

str が指す文字列により示された値を unsigned long に変換した結果の値を返す。

strtol()str の指す文字列を読み込み、 開始部・本体・末尾部の 3 つの部分に分ける。

開始部は文字列先頭の空白文字類である。

本体は符号文字、数字または基数指定 radix によって数字として読み込まれることになる文字から構成される。 NULL 文字を検出した時点、 または基数指定 radix によって設定された数字以外の文字を検出した時点で本体は終了する。

末尾部は本体終了直後から NULL 文字までである。

strtol() は開始部を無視し、 本体を long 型数値に変換し、 NULL でない tail に末尾部先頭へのポインタを格納する。

整数文字列の形式については strtol() を参照のこと。

【参照】

strtol()

calloc
 
初期化付きメモリ獲得

【形式】

void*   calloc(size_t nmemb, size_t size)

【パラメータ】

size_t  nmemb   獲得する要素の数
size_t  size    一つの要素のサイズ

【リターン値】

= NULL  メモリ領域獲得不能、または、nmemb, size のいずれかが 0
≠ NULL  獲得メモリ領域へのポインタ

【解説】

size で指定したサイズのデータが nmemb 個格納できるメモリ領域を獲得する。 獲得した領域を 0 で初期化する。

nmemb または size が 0 の場合、calloc() の動作は処理系に依存する。 つまり、calloc()NULL を返すか一意に定めるポインタを返すかは処理系の実装に依存する。

【参照】

malloc(), realloc()

free
 
メモリブロック解放

【形式】

void    free(void *ptr)

【パラメータ】

void    *ptr    解放メモリブロックへのポインタ

【リターン値】

なし

【解説】

calloc()malloc()realloc() で動的に割り当てたメモリブロックを解放する。

ポインタ ptrcallocmalloc()realloc() で獲得したメモリブロックを指定したものであること。

解放されたメモリ領域は再びメモリ割当用に使用できる。

【参照】

malloc(), realloc()

malloc
 
メモリ獲得

【形式】

void*   malloc(size_t size)

【パラメータ】

size_t  size    メモリブロックサイズ

【リターン値】

= NULL      エラー(メモリは割り当てられていない)
≠ NULL      割り当てられたメモリブロックへのポインタ

【解説】

少なくとも size バイトの大きさを持つメモリブロックを獲得する。 実際に割付られる大きさは size バイト以上となり、その値は不確定である。

size = 0 の場合、 動作は処理系に依存する。

calloc() と異なり、メモリブロック内を初期化しない。

【参照】

calloc(), realloc(), malloctest()

realloc
 
メモリ再獲得

【形式】

void*   realloc(void *ptr, size_t size)

【パラメータ】

void    *ptr    変更前のメモリブロックへのポインタ
size_t  size    メモリサイズ

【リターン値】

= NULL      エラー(メモリは割り当てられていない)
≠ NULL      割り当てられたメモリブロックへのポインタ

【解説】

既に獲得したメモリブロックの内容を変えずにサイズを変更する。 サイズをより大きく指定した場合には、 アドレスが変わることがある。この場合、 ptr は既に解放されているので使ってはいけない。

ptrNULL の場合 malloc() と同じ動作をする。

size が 0 で ptrNULL でない場合 ptr の指すメモリブロックを解放する。

size が 0 で ptrNULL の場合の動作は処理系に依存する。

メモリが獲得できなかった場合には、ptr の状態は変化しない。

【参照】

malloc(), calloc()

malloctest
 
mallocデバッグ情報設定

【形式】

void    malloctest(int mode)

【パラメータ】

int mode    デバッグのモード指定

【リターン値】

なし

【解説】

malloc を使ってメモリを獲得したときのデバッグ用情報を得るためのモードを設定する。

mode =  0    通常モード
mode =  1    デバッグモード
mode = -1    使用状況ダンプ
mode = -2    使用状況詳細ダンプ

【参照】

malloc()
Scalloc, Sfree, Smalloc, Srealloc,Smalloctest
 
共有メモリの獲得/解放

【形式】

void *  Scalloc(size_t nmemb, size_t size)
void    Sfree(void *ptr)
void *  Smalloc(size_t size)
void *  Srealloc(void *ptr, size_t size)
void    Smalloctest(int mode)

【解説】

共有メモリを扱うという点以外では、 それぞれ calloc(), free(), malloc(), realloc(), malloctest() と同様の処理を行う。

同一プロセスの複数タスクから同時に使用した場合の動作は保証しない。

【参照】

calloc, free(), malloc(), realloc(), malloctest()

rand
 
乱数

【形式】

int rand(void)

【パラメータ】

なし

【リターン値】

0〜RAND_MAXの値

【解説】

疑似乱数を返す。

RAND_MAX は最低でも 32767 を保証する。

rand() はシードを変更しない限り同じ乱数の系列を返す。

【参照】

srand()

srand
 
乱数の初期値設定

【形式】

void    srand(unsigned int seed)

【パラメータ】

unsigned int    seed    初期値を設定するためのパラメータ

【リターン値】

なし

【解説】

rand() で発生させる疑似乱数の種 seed を設定する。

乱数の系列は種 seed によって変化する。 同じ seed では同じ疑似乱数列になる。

srand() を最初に呼ばない場合はシードを 1 にセットしたことと同じ結果になる。

【参照】

rand()

div
 
除算

【形式】

div_t   div(int num, int den);

【パラメータ】

int     num     分子
int     den     分母

【リターン値】

除算結果を div_t 型構造体で返す。

div_t 型構造体の定義は以下の通りである。

typedef struct {
        int     quot, rem;  /* quot は商、rem は剰余を返す */
} div_t;

【解説】

分子 num を分母 den で割った、商と剰余を計算する。 商の符号は両引数の符号が等しければ正、 異なれば負である。剰余の符号は num の符号と同じとする。 剰余が 0 以外であれば、 商は代表的な答えより小さい最大の整数と規定する。 この点でマシンの除算命令を実行するだけの演算子 /% と異なる。

【参照】

ldiv()

ldiv
 
除算

【形式】

ldiv_t  ldiv(long int num, long int den)
 

【パラメータ】

long int        num     分子
long int        den     分母

【リターン値】

除算結果を ldiv_t 型構造体で返す。

div_t 型構造体の定義は以下の通りである。

typedef struct {
        long int        quot, rem;      /* quot は商、rem は剰余を返す */
} ldiv_t;

【解説】

分子 num を分母 den で割った、 商と剰余を計算する。 商の符号は量引数の符号が等しければ正、 異なれば負である。剰余の符号は num の符号と同じとする。 剰余が 0 以外であれば、商は代表的な答えより小さい最大の整数と規定する。 この点でマシンの除算命令を実行するだけの演算子 /% と異なる。

【参照】

div()


この章の目次にもどる
前頁:1.7 bstdio.h にもどる
次頁:1.9 bstring.h にすすむ