C言語 - 標準ライブラリ - stdlib.h

 クラウディア
1. 概要
2. getenv
3. setenv
4. system
5. メモリの割り当て

1. 概要

 「stdlib.h」をどう理解するか。  標準ライブラリの中の「stdlib.h」ですからな。  標準中の標準とでもいうのでしょうか。

2. getenv


char *getenv(const char *name);
 「name」で示す環境変数の値の文字列を返す。

3. setenv


int setenv(const char *name, const char *value, int overwrite);
 環境変数「name」の値を「value」に設定する。  環境変数「name」が存在しない場合は、無条件に設定する。  環境変数「name」が存在する場合は、「overwrite」が 0 以外ならば、値を「value」に変更し、「overwrite」が 0 ならば変更しない。

4. system

 書式は

#include <stdlib.h>

int system(const char *string);
 マニュアルには、「system」 関数は、引数「string」をコマンドインタプリタ「sh」に渡します。呼び出し元プロセスは、シェルがそのコマンドの実行を完了するまで待ち、「SIGINT」および「SIGQUIT」を無視し、「SIGCHLD」をブロックします。」と書いてあります。  要は、「string」に書いた文字列をコマンドとして、そのまま実行するちゅうことです。  気を付けなければいけないのは、実行するシェルは「sh」であるということと、実行する際の環境変数は、プログラムを実行しているユーザの環境に依存するということですな。  また、戻り値がややこしい。  「gcc」では、下記のように書いてあります。
「string」が「NULL」の場合、 シェルが利用可能ならゼロ以外の値、利用不可なら「0」。

子プロセスを作成できなかった場合、または子プロセスのステータスを取得できなかった場合、 返り値は「-1」である。

子プロセスでシェルを実行できなかった場合、 返り値は子プロセスがステータス「127」で「_exit」を呼び出して終了したのと同じになる。

システムコールがすべて成功した場合、 返り値は「string」を実行するのに使用された子プロセスのシェルの終了ステータスとなる (シェルの終了ステータスはそのシェルが実行した最後のコマンドの終了ステータスである)。
 端的にいうと、戻り値では、判定するのが難しいということです。  ですので、実行結果を取得するのは、「system」によって実行することが与える状況を別途判定して、実行結果が成功か失敗かを判断すべきだと思います。

5. メモリの割り当て

 メモリの割り当て用に、以下の関数が用意されています。

#include <stdlib.h>

void *malloc(size_t size);
void *calloc(size_t number, size_t size);
void *realloc(void *ptr, size_t size);
void *reallocf(void *ptr, size_t size);
void  free(void *ptr);
 「size_t size」は、いずれも割り当てるメモリのサイズをバイト単位で指定します。  バイトのサイズが、バウンダリの境界にある場合は、適切な長さに調整されます。  「malloc」は、確保したメモリの中身は不定ですが、「calloc」は、0 で初期化されています。  「realloc」「reallocf」は、既に確保したメモリのサイズを指定サイズへ変更します。  いずれも、指定サイズのメモリが確保できなかった場合は、メモリのポインタに「NULL」ポインタが返ります。  「reallocf」は、指定サイズのメモリが確保できなかった場合は、メモリのポインタに「NULL」ポインタが返るだけでなく、確保していたメモリの領域を解放します。  「free」は、確保したメモリの領域を解放します。
ハイスピードプラン