Linux中真正的系统调用——exec函数族

exec函数族

一般在使用过程中,通常通过fork创建一个新的进程都是为了立即执行新的、不同的程序,通过调用exec函数族创建新的地址空间,并载入新的程序。
最终通过exit()系统调用退出执行,提到这个函数可以想到与之相近的几个函数,如下:

  1. exit() 终结当前进程并将其所占用的资源释放掉。
  2. _exit()和_Exit()终结当前进程但不会释放所占用的资源。
  3. return 结束当前函数,并且带出返回值。

exec函数族的原型如下:

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,...,char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);

以上函数简单可以理解为使用一个新的进程来替换掉当前的进程。

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

/*
*打印时戳 date+%s
*/
int main(int argc, char *argv[])
{
    
    
	puts("begin");
	
	fflush(NULL);   //刷新缓冲区
	
	//date命令通过which可查到其位置在/bin/date下
	//参数1:新进程路径
	//参数2:新进程的名字
	//参数3:选项,所有选项必须以NULL结尾
	if(execl("/bin/date","date","+%s",NULL) < 0)   
	{
    
    
		perror("execl()");
		exit(0);
	}

	puts("End");

    return 0;
}

其他函数用法与以上函数的用法差不多,就不在这里赘述了。

猜你喜欢

转载自blog.csdn.net/qq_40996117/article/details/107433366
今日推荐