linux cプログラミングexc関数族
exec関数族
1.exec()関数族が現在のプロセスイメージを新しいプロセスイメージに置き換えることを説明します.プロセスIDは変わりません.2.規律exec関数族の名前は近く、使用も近いです.それらの一般的な法則は以下の通りです.l(list)コマンドラインパラメータリストp(path)検索酵素fileの場合は、path変数v(vector)を使用してコマンドラインパラメータ配列e(environment)を使用して環境変数配列を使用し、プロセスの元の環境変数を使用せずに、新しいロードプログラムが実行する環境変数を設定します.バンドのlのexec関数は、このような関数があります.execl、execlp、execleは、後のパラメータが可変パラメータとして与えられ、すべて空のポインタで終わることを示します.ここで特に説明するのは、プログラム名もパラメータですので、最初のパラメータはプログラム名です. バンドpのexec関数には、このような関数があります.execlp、execvpは具体的に説明しています.最初のパラメータは具体的なパスを与える必要がなく、関数名を与えさえすればいいです.システムはPATH環境変数の中で対応するプログラムを探しています.見つけられなかったら-1に戻ります. バンドvのexec関数のこのような関数は、execv、execvpによって具体的に説明されています.コマンドに必要なパラメータがchar*arg[]で与えられ、argの最後の要素はNULL でなければなりません.のeバンドのexec関数は、このような関数があります.execleは、環境変数を交換が必要なプロセスに伝達し、元の環境変数は再機能しません. Linuxアプリケーションからのプログラミングを参照してください.
3.ヘッダファイル
7.例
1.l付きのexec関数
このような関数は、execl、execlp、execleです.
具体的な説明:後ろのパラメータは可変パラメータで与えられ、全部一つの空のポインタで終わることを示します.ここで特に説明するのは、プログラム名もパラメータですので、最初のパラメータはプログラム名です.
このような関数は、execlp、execvpです.
具体的な説明:最初のパラメータは具体的なパスを与える必要がないことを示しています.関数名を与えさえすれば、システムはPATH環境変数の中で対応するプログラムを探しています.見つからなかったら-1に戻ります.
このような関数は、execv、execvpです.
具体的な説明:コマンドを表すために必要なパラメータはchar*arg[]で与えられ、argの最後の要素はNULLでなければならない.
このような関数は、execleです.
具体的な説明:環境変数を交換が必要なプロセスに伝達しても、元の環境変数は機能しません.
1.exec()関数族が現在のプロセスイメージを新しいプロセスイメージに置き換えることを説明します.プロセスIDは変わりません.2.規律exec関数族の名前は近く、使用も近いです.それらの一般的な法則は以下の通りです.l(list)コマンドラインパラメータリストp(path)検索酵素fileの場合は、path変数v(vector)を使用してコマンドラインパラメータ配列e(environment)を使用して環境変数配列を使用し、プロセスの元の環境変数を使用せずに、新しいロードプログラムが実行する環境変数を設定します.
3.ヘッダファイル
#include
extern char **environ;
4.声明int execl(const char *path, const char *arg, ...
/* (char *) NULL */);
int execlp(const char *file, const char *arg, ...
/* (char *) NULL */);
int execle(const char *path, const char *arg, ...
/*, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);
5.パラメータint execl(const char *path, const char *arg, ...
/* (char *) NULL */);
/*
path
arg , , NULL
*/
int execlp(const char *file, const char *arg, ...
/* (char *) NULL */);
/*
file , path
arg , , NULL
*/
int execle(const char *path, const char *arg, ...
/*, (char *) NULL, char * const envp[] */);
/*
path
arg , , NULL
envp[] , , NULL
*/
int execv(const char *path, char *const argv[]);
/*
path
argv[]
*/
int execvp(const char *file, char *const argv[]);
/*
file , path
argv[]
*/
int execvpe(const char *file, char *const argv[],char *const envp[]);
/*
file , path
argv[]
envp[] , , NULL
*/
6.戻り値exec関数族はエラーが発生した時のみ戻ります.は-1の値を返し、errnoを適切に設定します.7.例
1.l付きのexec関数
このような関数は、execl、execlp、execleです.
具体的な説明:後ろのパラメータは可変パラメータで与えられ、全部一つの空のポインタで終わることを示します.ここで特に説明するのは、プログラム名もパラメータですので、最初のパラメータはプログラム名です.
#include
#include
int main()
{
printf("process begin...
");
execl("/bin/ls", "ls", NULL);
printf("process end...
");
return 0;
}
2.p付きのexec関数このような関数は、execlp、execvpです.
具体的な説明:最初のパラメータは具体的なパスを与える必要がないことを示しています.関数名を与えさえすれば、システムはPATH環境変数の中で対応するプログラムを探しています.見つからなかったら-1に戻ります.
#include
#include
int main()
{
printf("process begin...
");
execlp("ls", "ls", "-l", NULL);
printf("process end...
");
return 0;
}
3.v付きのexec関数このような関数は、execv、execvpです.
具体的な説明:コマンドを表すために必要なパラメータはchar*arg[]で与えられ、argの最後の要素はNULLでなければならない.
#include
#include
int main()
{
printf("process begin...
");
char *argv[] = {"ls", "-a", "-l", NULL};
execvp("ls", argv);
printf("process end...
");
return 0;
}
4.eを持つexec関数このような関数は、execleです.
具体的な説明:環境変数を交換が必要なプロセスに伝達しても、元の環境変数は機能しません.
//execle
#include
#include
int main()
{
printf("process begin...
");
char *envp[] = {"AA=11", "BB=22", NULL};
execle("./env", "env", NULL, envp);
printf("process end...
");
return 0;
}
8.注意着信プログラムのパラメータの中で、arg[0]はプログラムの名前が一般的ですので、fileパラメータはarg[0]と同じです.しかし、exec関数族では、arg[0]という位置を自由に書いても問題がないので、実行されるプログラムは一般的にarg[0]というパラメータは使用されないと思いますが、パラメータが使用されると影響があります.