linux學習總結進程與線程——exec函數族

來源:互聯網
上載者:User

exec提供了一種在進程中啟動另外一個程式的執行的方法。它可以根據指定的檔案名稱或目錄名找到可執行檔,並用它來取代原調用進程的資料區段、程式碼片段和堆棧段。在執行完之後,原調用進程的內容除了進程號外,其他全部都被替換了。

1.可執行檔尋找方式
exec族中的函數以p結尾的函數可以只給出檔案名稱,系統會自動從環境變數“$PATH”所包含的路徑中進行尋找。
即 結尾不是p的,必須要給出檔案的路徑,並且最後的參數為NULL;

2.參數表傳遞方式
兩種方式:逐個列舉或是將所有參數通過指標數組傳遞。
以函數名的第五位字母來區分,字母為“l”(list)的表示逐個列舉的方式;
字母“v”(vertor)的表示將所有參數構造成指標數組傳遞;

3.環境變數的使用
exec函數族可以預設使用系統的環境變數,也可以傳入指定的環境變數。這裡,以“e”(Environment)結尾的兩個函數可以 envp[]中傳遞當前進程所使用的環境變數。

exec(1,2,3....,最後個參數)
exec族中,第一個參數為要執行程式的路徑。
          第二個參數為要執行的程式名稱。
     第三個參數為給要執行程式傳遞參數。
     最後一個參數為NULL;

例子:
int main ()
{
if(-1 == execle("./exec2","exec2","1.txt",NULL))
{
perror("");
exit(0);
}
}//開啟exec2可執行檔,並將"1.txt"傳遞給exec2中的main函數中的參數中

 exit()調用退出處理函數,清理緩衝區,調用exit系統調用,進程結束。
_exit()不清理緩衝區。

 

利用exec實現shell的模仿 :

#include <stdio.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>

#define N 64

int main()
{
    pid_t pid;
    char buf[N];
    char *arg[N];
    int i = 0;

    printf(">");
    while (fgets(buf, N, stdin) != NULL)
    {
        buf[strlen(buf)-1] = 0;
        if ((pid = fork()) == -1)
        {
            perror("fork");
            exit(-1);
        }
        if (pid == 0)
        {
            arg[i++] = strtok(buf, " ");
            do
            {
                arg[i++] = strtok(NULL, " ");
            }while(arg[i-1] != NULL);

            if (execvp(arg[0], arg) != -1)
            {
                perror("execvp");
                exit(0);
            }
        }
        else
        {
            wait(NULL);
            printf(">");
        }
    }

    exit(0);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.