Linux Cプログラミング——execveまとめ

2223 ワード

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プログラム
#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