exec… 系列函數

來源:互聯網
上載者:User

exec... 系列函數




L 系列:


int    execl    ( char *path, char *arg0, char *arg1, ... , NULL);


int    execlp    ( char *path, char *arg0, char *arg1, ..., NULL);




int    execle    ( char *path, char *arg0, char *arg1, ..., NULL, char **envp
);




int    execlpe    ( char *path, char *arg0, char *arg1, ..., NULL, char **envp
);








V 系列:




int    execv    ( char *path,  char *arg[] );




int    execvp    ( char *path, char *arg[] );


int    execve    ( char *path, char *arg[]
, char **envp
);




int    execvpe  ( char *path,  char *arg[]
, char **envp
);






說明: 原型在 process.h




exec...系列函數可以載入並運行稱為子進程的其它檔案。調用成功時,子進程將覆蓋父進程。
必須有足夠的記憶體。




*
path 是被調用子進程檔案名稱。
exec...函數通過標準的 DOS 搜尋演算法來尋找



path:


1. 如果木有副檔名或者句點:先尋找該名;如果沒有找到,就加上.com,.exe副檔名再找


2. 如果給定副檔名, 直接尋找給定 的檔案


3. 如果給出句點, 則尋找沒有副檔名的檔案


4. 如果path沒有包含確定的目錄, 含有 p 尾碼的
 exec...函數 首先在目前的目錄下尋找,


如果找不到,就 再尋找DOS環境變數PATH所指定的目錄





#include<process.h>
#include<stdio.h>
#include<errno.h>
void    main(int argc, char * argv[])
{
    int    i;
    printf("Command line arguments:/n");
    for(i = 0; i < argc; i++)
        printf("[%2d] : %s/n", i, argv[i])
;
    printf(" About to exec child with arg1 arg2 ... /n");
    execvp("h://output//ten2bin.exe"
, argv);
    perror("execv error");
    exit(1);
}







#include<process.h>
#include<stdio.h>
#include<errno.h>
void    main(int argc, char * argv[])
{
    int    i;
    printf("Command line arguments:/n");
    for(i = 0; i < argc; i++)
        printf("[%2d] : %s/n", i, argv[i]
);
    printf(" About to exec child with arg1 arg2 ... /n");
    execvp("ten2bin.exe"
, argv);
    perror("execv error");
    exit(1);
}




加在 exec...系列函數後的尾碼 L, V, P, E 表示命名函數的某種操作能力;




L:


表明指標參數 arg0, arg1, ... 作為獨立參數進行傳遞。通常, L 尾碼用於事Crowdsourced Security Testing道待傳遞參數個數的情況




V:


表明紮針參數 arg0], arg[1], ..., arg[n] 作為指標數組進行傳遞。通常, V 尾碼用於待傳遞參數個數可變的情況




P:


表明如果沒有指定目錄,則首先在目前的目錄下尋找檔案,沒有找到時再到環境變數PATH 指定的路徑尋找




E:


表明參數envp可以傳到子進程,用以改變子進程的環境。在沒有e尾碼的情況下,子進程將繼承父進程的環境






exec...
系列函數必須至少傳遞一個 參數(arg0 或 arg[0])給子進程,該參數約定為 path 的一個拷貝。類似於 main(int argc,
char * argv[])中的 argv[0], argn / arg[n] 後的 NULL 表示參數表結束。




執行成功時,傳回值為子進程的退出狀態(0為正常終結)。如果子進程 調用 了非0參數的exit函數,退出狀態則為非0值。


出現錯誤時,exec...函數傳回值 -1, 並將全域變數errno設定為下列之一。


E2BIG                參數表太長

EACCES            無此許可權


EMFILE               開啟的檔案太多


ENOENT             路徑或者檔案名稱沒有找到


ENOEXEC           運行格式錯誤


ENOMEM            無足夠記憶體




可移植性: 僅適用於DOS


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.