execvp函式的一個好玩的現象
阿新 • • 發佈:2018-11-04
05_2_2.c
#include<stdio.h>
#include<unistd.h>
int main(int argc, char const *argv[])
{
printf("05_2_2.c:\n");
printf("My pid is %d\n",getpid());
printf("My arguments: ");
for(int i = 0;i < argc ;i++)
{
printf("%s ",argv[i]);
}
printf("\n");
return 0;
}
單獨執行它的話 傳引數的時候,其第一個引數必定為./05_2_2 如下圖:
但是如果在另一個程式中用execvp函式來呼叫的話,就會出現這樣的情況:
05_2_1.c #include<stdio.h> #include<unistd.h> #include<stdlib.h> int main(int argc, char const *argv[]) { printf("5_2_1: My pid is %d.\n",getpid()); char * args[] = {"hahahaha","heihei","haha",NULL}; execvp("./05_2_2",args); return 0; }
即可以清楚地看到在05_2_1中執行了05_2_2程式,並且,05_2_2程式在執行的時候,第一個引數可以為任意的了。