【C语言】execlp和execl函数使用

函数说明: 

  execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了.

 

execlp代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

int main(int argc,char *argv[])
{
    pid_t pid = fork();
    if(pid == -1)
    {
        perror("fork error");
        exit(1);
    }else if (pid == 0) //如果是子进程则执行下边语句
    {
     //子进程单独执行此语句,执行系统命令ls -l -h,以NULL作为参数结尾,并且子进程不在执行后边代码
execlp("ls","ls","-l","-h",NULL); perror("exec error"); exit(1); } else if(pid > 0) { sleep(1); printf("i'm parent: %d\n",getpid()); } }

execl代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

int main(int argc,char *argv[])
{
	pid_t pid = fork();
	if(pid == -1)
	{
		perror("fork error");
		exit(1);
	}else if (pid == 0)
	{
          //与execlp类似,也是子进程单独执行此语句,第一个参数为文件地址,这样就可以实现子进程执行其他脚本的功能了
		execl("./a.out","./a.out",NULL);
		perror("exec error");
		exit(1);
	}
	else if(pid > 0)
	{
		sleep(1);
		printf("i'm parent: %d\n",getpid());
	}
}

  

posted @ 2022-08-16 11:04  老年新手工程师  阅读(1331)  评论(0编辑  收藏  举报