もっと詳しく

execlは、execveのフロントエンドとして機能するexec呼び出しのファミリーの1つです。 次のスクリーンショットは、manexeclを参照しています。

これらの7つのexec関数の引数を覚えるのは困難です。 関数名の文字は多少役に立ちます。 文字pは、関数がファイル名引数を取り、PATH環境変数を使用して実行可能ファイルを検索することを意味します。 文字lは、関数が引数のリストを取り、文字vと相互に排他的であることを意味します。つまり、argvを取ります。[] ベクター。 最後に、文字eは、関数がenvpを取ることを意味します[] 現在の環境を使用する代わりにアレイ。

7つのexec関数の違い

「execveの使用」の投稿では、新しいプロセスを起動し、それに引数を渡すためにどのように使用できるかを見ました。 execlは、現在のプロセスを置き換える新しいプロセスも起動します。 execlの構文は次のとおりです。

int execl(const char *path, const char *arg, ...);

引数
:execlによって実行する必要のある実行可能ファイルへのパス。
arg…:実行可能ファイルに渡す必要のある引数への一連のポインタ。

execveでは、ポインターの配列を引数として渡す必要がありましたが、execlでは、ポインターを引数として直接渡すことができます。 これらの引数はNULLで終了する必要があります。

1.渡された引数を出力する簡単なプログラムを書いてみましょう。

# vi hello.c
#include <stdio.h>
main(int argc,char *argv[],char *envp[]){

printf("Filename: %sn",argv[0]);
printf("%s %sn",argv[1],argv[2]);
}

2.慣例により、最初の引数は常にファイル名である必要があり、同じものに従います。 これをコンパイルして、実行可能ファイルに「hello」という名前を付けましょう

3.次に、execlを使用して実行可能ファイル「hello」を実行するプログラムを作成しましょう。

# vi execl.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

main() {
char *temp,*temp1,*temp2;
temp="hello";  //filename
temp1="Funny"; 
temp2="world";

execl("hello",temp,temp1,temp2,NULL);
printf("Error");
}

4.コードをコンパイルして実行します。

# cc execl.c -o execl
./execl 

出力:

Filename: hello
Funny world

したがって、プログラムは実行可能ファイル「hello」を正常に実行し、引数を渡すこともできます。 また、execlが呼び出し元の関数に戻らなかったことにも注意してください。そうしないと、execlの呼び出し後に「Error」ステートメントが出力されます。

The post execlの使用方法(例を含む)–オタク日記 appeared first on Gamingsym Japan.