1. 程式人生 > >execvp函式的一個好玩的現象

execvp函式的一個好玩的現象

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 如下圖:
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_1中執行了05_2_2程式,並且,05_2_2程式在執行的時候,第一個引數可以為任意的了。