Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linux execファミリ関数の使用の基本チュートリアル

Linux execファミリ関数の使用の基本チュートリアル

  

シェルスクリプトコマンドを起動します。execlp(" sh"、"、"、filename"、(char *)0);




execは、それを呼び出したプログラムのイメージを、実行されたプログラムで完全に置き換えます。 Forkは新しいプロセスを作成し、新しいPIDを生成しますexecは新しいプログラムを起動し、元のプロセスを置き換えますので、execによって実行される新しいプロセスのPIDはexecを呼び出すプロセスのようには変わりません。

int exec…他のプログラムをロードして実行します。int execl(char *パス名、char * arg0、char * arg1、...、char * argn、NULL)int execle(char *パス名、char * Arg0、char * arg1、...、char * argn、NULL、char * envp [])int execlp(char *パス名、char * arg0、char * arg1、...、NULL)int execlpe(char *パス名、 char * arg0、char * arg1、...、NULL、char * envp [])int execv(char *パス名、char * argv [])int execve(char *パス名、char * argv []、char * envp [] ,null,null,3],] exec int execvp(char * pathname、char * argv [])int execvpe(char * pathname、char * argv []、char * envp [])execファミリーの関数は、プログラムpathnameをロードして実行し、引数arg0(arg1)を設定します。 、arg2、argv []、envp [])がサブルーチンに渡され、エラーがexec関数ファミリーの中で-1を返し、接尾辞l、v、p、eがexecに追加されます。指定された関数は何らかの操作能力を持ちます。接尾辞がpの場合、この関数はDOSのPATH変数を使用してサブルーチンファイルを見つけることができます。 /bin /cat /etc /passwd /etc /group、lというコマンドを実行したい場合は、終了ポインタとしてNULLポインタを使用して、コンマ区切りの引数リストを受け取る必要があります(" /bin /cat"、" /" /" /etc /group"、NULL); v、NULLで終わる文字列配列へのポインタを受け取りたいのです。char * argv [] = {" /bin /cat"、" /"、" /etc /group"、NULL} execv(" /bin /cat"、argv); eこの関数は指定されたパラメータenvpを渡し、接尾辞eなしで子プロセスの環境を変更できるようにする。プロセスは現在のプログラムの環境を使用します。 Envpは、NULLで終わる文字列配列ポインタexecl(実行ファイル)関連の関数でもあります。fork、execle、execcl、execv、execve、execvpヘッダーファイル#include< unistd.h> define関数int execl(const char * path、const Char * arg、....);関数説明execl()は、パラメータパス文字列で表されるファイルパスを実行するために使用され、次のパラメータは、ファイル実行時に渡されたargv(0)、argv [1]を表します。;…、最後の引数はNULLポインタ(NULL)で終わらなければなりません。正常に実行された場合は戻り値は返されず、実行が失敗した場合は直接-1が返され、失敗の理由はerrnoに格納されます。例#include< unistd.h> main(){execl(< /bin /ls>、< --al< /etc /passwd>、(char *)0);を実行します/* /bin /ls -al /etc /passwd * / - rw-r - r-- 1 root root 705 Sep 3 13:52 /etc /passwd

execlp(PATH環境変数から)ファイルを検索して実行します。)関連する関数fork、execl、execle、execv、execve、execvpヘッダーファイルを定義します。#< unistd.h>定義関数int execlp(const char * file、const char * arg、……); execlp()は、PATH環境変数が指すディレクトリからパラメータファイルと一致するファイル名を探し、そのファイルが実行され、2番目以降のパラメータがファイルのargv [0]、argv [1]として扱われることを説明します。 ……、最後の引数はNULLポインタ(NULL)で終わらなければなりません。戻り値実行が成功した場合は関数は戻りません実行が失敗した場合は直接-1を返し、失敗の理由はerrnoに格納されます。エラーコードはexecve()を参照しています。例/* ls -al /etc /passwd execlp()を実行すると、PATH変数の/binに応じて、/bin /ls * /#include main(){execlp(' ls')、' ls&'())が見つかります;、< -al< /etc /passwd"、(char *)0);} -rw-r - r-- 1 root rootを実行します。705 Sep 3 13:52 /etc /passwd

execv(実行ファイル)関連関数fork、execl、execle、execcl、execve、execvpヘッダーファイル#include< unistd.h>定義関数int execv(const char * path、char * const argv []); function execv()メソッドはパラメータパス文字列で表されるファイルのパスを実行するために使用されますexecl()との違いはexecve()が2つのパラメータしか必要とせず、2番目のパラメータが配列ポインタを使用して実行可能ファイルに渡されることです。戻り値実行が成功した場合は関数は戻りません実行が失敗した場合は直接-1を返し、失敗の理由はerrnoに格納されます。エラーコードについてはexecve()を参照してください。例/* /bin /ls -al /etc /passwd * /#include< unistd.h> main(){char * argv [] = {' ld< /al< /al< /etc /passwd /etc //)/を実行します。 execv(< /bin /ls>; argv);} -rw-r - r-- 1 root rootを実行します。705 Sep 3 13:52 /etc /passwd

execve(ファイル実行)関連関数fork、execl、execle、execcl、execv、execvpヘッダーファイル#include< unistd.h>定義関数int execve(const char * filename、char * const argv []、char * Const envp []);関数の説明execve()は、パラメータfilenameの文字列で表されるファイルパスを実行するために使用され、2番目のパラメータは配列ポインタを使用して実行可能ファイルに渡され、argvはargvを含むプログラムの完全なパラメータリストに渡されます。 [0]は一般に実行中のプログラムの名前で、最後のパラメータは実行ファイルに渡される新しい環境変数の配列です。戻り値実行が成功した場合は関数は戻りません実行が失敗した場合は直接-1を返し、失敗の理由はerrnoに格納されます。エラーコードEACCES1:実行するファイルにユーザ実行権限がありません。 2.実行するファイルが属するファイルシステムがnoexecモードでハングしている。 3.実行するファイルまたはスクリプト変換プログラムが一般ファイルではありません。

Copyright © Windowsの知識 All Rights Reserved