第二十篇:在子程式中裝載新的程式

穆晨發表於2017-01-28

前言

       在很多時候,建立一個子程式的目的,僅是讓它去執行一些其他已經編譯好了的程式

       本文將介紹其簡單實現方法。

execl 函式族

       為何稱為函式族 --- 是因為根據其引數格式,是否傳遞環境變數等,execl 函式有幾個變體。各種變體的原型請讀者自行參考資料。

       但它們的作用都一樣,那就是用一個全新的程式替換當前程式的正文,資料,堆和棧

       下面的程式以 execl 函式進行示範:新建一個子程式,並在子程式中呼叫編譯好的 hello world 程式。

程式碼實現

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int main (void) {
 5 
 6     int pid;
 7 
 8     if ((pid = fork()) == 0) {
 9         
10         // 需要留心的是引數的結尾必須跟上一個 (char *)0 表示引數結束
11         execl ("/home/fangmeng/hello", "hello", (char *)0);
12     }
13     else if (pid < 0) {
14         printf("建立子程式失敗\n");
15         return 1;
16 
17     }
18     else {
19         int  *status;
20         wait(status);
21     }
22     
23     return 0;
24 }

執行測試

       

小結

       記得隨時清理掉殭屍子程式

相關文章