用fork函數(shù)創(chuàng)建子進(jìn)程后,子進(jìn)程往往要調(diào)用一種exec函數(shù)以執(zhí)行另一個程序,該子進(jìn)程被新的程序替換,改變地址空間,進(jìn)程映像和一些屬性,但是pid號不變。 execve(): #include int execve(const char *filename, char *const argv[], char *const envp[]); 參數(shù)含義: filename:路徑名,表示載入進(jìn)程空間的新程序路徑。 argv[]:命令行參數(shù),argv[0]為命令名。 envp[]:新程序的環(huán)境變量。 返回值:成功時不會返回,使用時不用檢查返回值,可通過errno檢查。 以下函數(shù)都是根據(jù)execve實現(xiàn): int execl(const char *path, const char arg, …/ (char *) NULL */); int execlp(const char *file, const char arg, …/ (char *) NULL */); int execle(const char *path, const char arg, …/, (char *) NULL, char * const envp[] */); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[],char *const envp[]); 實驗代碼: 創(chuàng)建子進(jìn)程,子進(jìn)程使用execl調(diào)用ls查看當(dāng)前目錄下的文件。 exec.c: 使用execl調(diào)用shell命令查看文件信息。 ![]() ![]() 執(zhí)行結(jié)果: ![]() Linux系統(tǒng)基于這些函數(shù)實現(xiàn)了“popen”,“system”等函數(shù),這些函數(shù)能夠直接調(diào)用shell等函數(shù)。 ![]() |