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