Linux系统编程之程序的执行(exec函数族)

程序文件存储在磁盘上,当系统需要执行程序时将其加载至内存中形成进程。我们程序员可以通过一些调用,使进程能以全新的程序来替换当前运行的程序。

exec()函数族

Linux环境下使用exec()函数执行一个新的程序,该函数在文件系统中搜索指定路径的文件,并将该文件内容复制到调用exec()函数的地址空间,取代原进程的内容。

exec()函数原型,如下(其实有很多,其实大部分使用方式都是大同小异的...)

#include <unistd.h>

int execl(const char *pathname,const char *arg0,···);
int execlp(const char *filename,const char * arg0, ···);

参数其实很简单,一个要pathname也就是要执行的程序的环境变量后面是这个程序的参数(系统自带的可执行程序如,ls,cp,cat 等),另一个是要filename也就是要执行的程序的文件名后面是这个程序的参数。

测试代码

execlp():

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
        pid_t pid = fork();
        if(pid == -1){
                perror("fork error");
                exit(1);
        }else if(pid == 0){
                execlp("ls","ls","-l","-h",NULL);
                perror("execlp is error");
                exit(1);
        }else if(pid > 0){
                sleep(1);
                printf("i am the parent my id is %d \n",getpid());
        }
        return 0;
}

execl()

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
        pid_t pid = fork();
        if(pid < 0){
                perror("fork fail");
                exit(1);
        }else if(pid == 0){
                execl("./a.out","./a.out",NULL);
                perror("execl fail");
                exit(1);
        }else if(pid > 0){
                sleep(1);
                printf("i am the parent my id is %d \n",getpid());
        }
        return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容