Linux 编程
发布网友
发布时间:2022-04-26 07:32
我来回答
共3个回答
热心网友
时间:2022-06-25 08:07
第一个参数表示进程名
第二个参数相当于argv[0],这里是sh,其实由于PATH环境变量的原因所以你可以这么使用
而事实上这句应该是/bin/sh这样的绝对路径
第三个四三参数相当于argv[1] argv[2]。。。。。
即由第二个参数开始相当于c语言中main函数的char **argv
然后这个命令行参数由NULL来结束
这个函数会在使用的地方将另一个外部程序拷贝到执行这个函数的地址处
并从该外部程序的头开始执行该外部程序
这就是说在调用该函数处后面的原代码被加载进来的外部程序代码覆盖掉
所以在某个程序中调用外部另一个程序而又保持调用程序不会被覆盖的方法就是
调用程序创建一个进程,然后调用该函数将外部程序的代码覆盖掉新进程
这其实就是一个创建新进程调用外部程序的
像linux的bash其实都使用了这种方法对外部程序进行调用
热心网友
时间:2022-06-25 08:07
定义函数:
int execlp(const char * file,const char * arg,...,(char *)0);
函数说明:
execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了
热心网友
时间:2022-06-25 08:08
执行命令cmd_string