Linux Cプログラミング——execveまとめ
execve関数の役割は新しいプログラムを実行することであり、プログラムはバイナリの実行可能プログラムであってもshell、pathonスクリプトであってもよい.
関数のプロトタイプ:
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
パラメータの説明:
filename:プログラムが存在するパス
Argv:プログラムに渡されるパラメータ、配列ポインタargvはプログラム(filename)で始まる必要があります.NULLで終わる必要があります.
Envp:プログラムに渡される新しい環境変数.shellスクリプトでも実行可能ファイルでも使用できます.NULLで終わる必要があります.
関数の戻り値:
成功した戻り値なし、失敗した戻り値-1
例1実行可能プログラムを呼び出す
main.c---->mainプログラム
execve_test.c---->execve_testプログラム
実行プログラム:./main
実行結果:
environ[0]:T1=222environ[1]:T2=333argv[0]:./execve_testargv[1]:1argv[2]:2
例2、shellスクリプトを呼び出す
main.c---->mainプログラム
execve_shell.shスクリプト
実行プログラム:./main
実行結果:
./execve_shell.sh 1 2222333
関数のプロトタイプ:
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
パラメータの説明:
filename:プログラムが存在するパス
Argv:プログラムに渡されるパラメータ、配列ポインタargvはプログラム(filename)で始まる必要があります.NULLで終わる必要があります.
Envp:プログラムに渡される新しい環境変数.shellスクリプトでも実行可能ファイルでも使用できます.NULLで終わる必要があります.
関数の戻り値:
成功した戻り値なし、失敗した戻り値-1
例1実行可能プログラムを呼び出す
main.c---->mainプログラム
#include
#include
#include
#include
int main(int argc, char *argv[])
{
char *envp[] = {"T1=222","T2=333",NULL};
char *argv_send[] = {"./execve_test","1","2",NULL};
execve("./execve_test",argv_send,envp);
printf("do this.....\r
");
return 0;
}
execve_test.c---->execve_testプログラム
#include
#include
#include
#include
extern char **environ;
int main(int argc, char *argv[])
{
int i = 0;
// envp,
for( i = 0; environ[i] != NULL; i++ )
{
printf("environ[%d]:%s\r
",i,environ[i]);
}
printf("\r
\r
");
// argv,
for( i = 0; i < argc; i++ )
{
printf("argv[%d]:%s\r
",i,argv[i]);
}
return 0;
}
実行プログラム:./main
実行結果:
environ[0]:T1=222environ[1]:T2=333argv[0]:./execve_testargv[1]:1argv[2]:2
例2、shellスクリプトを呼び出す
main.c---->mainプログラム
#include
#include
#include
#include
int main(int argc, char *argv[])
{
char *envp[] = {"T1=222","T2=333",NULL};
char *argv_send[] = {"./execve_shell.sh","1","2",NULL};
execve("./execve_shell.sh",argv_send,envp);
printf("do this.....\r
");
return 0;
}
execve_shell.shスクリプト
#!/bin/bash
echo $0 $1 $2
echo $T1
echo $T2
実行プログラム:./main
実行結果:
./execve_shell.sh 1 2222333