天天看點

Linux環境程式設計之程序(五):競争條件以及exec函數

(一)

當多個程序企圖對共享資料進行某種處理,而最後的結果又取決于程序運作的順序時,就認為它們發生了競争關系。避免競争的條件,給出apue上的一個代碼吧:

(二)

對基本的程序控制原語,前面提到用fork可以建立新程序,exit函數和兩個wait函數處理終止和等待終止,用exec函數可以執行新的程式。

       #include <unistd.h>

       extern char **environ;

       int execl(const char *path, const char *arg, ...);

       int execv(const char *path, char *const argv[]);

       int execle(const char *path, const char *arg, ..., char * const envp[]);

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

       int execvp(const char *file, char *const argv[]);

int execlp(const char *file, const char *arg, ...);

這些函數的差別有:

1、前4個去路徑名作為參數,後兩個取檔案名作為參數。

2、與參數表的傳遞有關(l表示list,v表示vector)。

3、與向新程式傳遞環境表相關。以e結尾的兩個函數可以傳遞一個指向環境字元串指針數組的指針。其他4個函數則使用調用程序中的environ變量為新程式複制現有環境。

這6個函數中隻有execve是核心的系統調用。另外5個隻是庫函數,它們最終都要調用該系統調用。

Linux環境程式設計之程式(五):競争條件以及exec函數