作用:在程式中呼叫其他程式來運作,將目前行程交託給下一個程式,exec()將行程交託後,原程式將不再繼續運作。
sample code:
main.c
#include <unistd.h>//exec()的宣告
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>//errno的宣告
int main(int argc, char* argv[])
{
char *my_env[] ={"FOOD=coffee",NULL}; //環境變數name=value 並且用NULL告知程式最後項目
if(execle("./coffee","./coffee","donuts",NULL,my_env)==-1)//如果有找到coffee.exe就會跳去執行coffee.exe
{
fprintf(stderr,"cant run:%s\n",strerror(errno));//strerror(errno)為錯誤訊息種類
return -1;
}
return 0;
}
coffee.c
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
char *w = getenv("EXTRA");
if(!w)
w=getenv("FOOD"); //getenv("FOOD")抓取環境變數的值coffee
if(!w)
w = argv[argc -1];
char *c = getenv("EXTRA");
if(!c)
c= argv[argc -1];//讀取argv[1]
printf("%s with %s\n",c,w);
return 0;
}
補充:1
參照execle("./coffee","./coffee","donuts",NULL,my_env)
argc =2 argv[0] ="./coffee" argv[1]="donuts"
補充:2
exec種類
execl 接受引數串列
execv接受引數陣列
execl p 根據 路徑尋找程式
execl pe 使用環境字串的陣列
補充:3
errno 為錯誤編號
strerror(錯誤編號)回傳字串告知何種錯誤
補充:4
if(execle("./coffee","./coffee","donuts",NULL,my_env)==-1)
系統呼叫出問題時通常回傳-1 (但不總是-1)