LinuxでのExecl学習

  
        

Linuxファイルの下に

#include< unistd.h>

関数定義
int execl(const文字*パス、const文字* arg、...);

関数の説明
EXECL()接尾辞"あり; L"代表的なリストは、パラメータリストの意味は、第1のパラメータパス文字ポインタは、次のパラメータを実行するためのファイルパスである場合に渡されるパラメータのファイルリストの実装を表し:ARGV [0 ]、argv [1] ...最後のパラメータはNULLポインタNULLで終わらなければなりません。

関数の戻り値
成功は値を返さず、失敗は-1を返し、失敗の理由はerrnoに格納され、perror()を介してインスタンス1を印刷することができます。

 root @ wl-MS-7673:/home /Wl /desktop /c ++#cat -n execl.cpp 1 /* /bin /ls -al /ect /passwd * /2を実行します。#include< unistd.h> /*** File:execl.c ** /3 #include<入出力ストリーム> 4名前空間stdを使用して、/binディレクトリの下で行わ5つのINTメインLS()最初のパラメータは、プログラムLSの名前である{7 //6、第二のパラメータは" -Al"第三パラメータである" /etc /passwdファイル" 8 9 IF(EXECL(" /binに/LS"、" LS"、" -Al"、" /etc /passwdファイル"(CHAR *)0)< 0)10 11 {12 COUT<<" EXECLエラー"<< ENDL; 13}そうでなければ14 15 {16 COUT<<"成功"<< ENDL; 17} 18リターン0; 19 }ルートの@ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#G ++ execl.cpp -o execlroot @ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#./execl -rw-r--のR-- 1 root root 1801 11月28日09:46 /etc /passwdroot @ wl-MS-7673:/home /wl /Desktop /c ++#/binディレクトリのlsが実行され、最初のパラメータがプログラム名ls、2番目のパラメータが" -al"、3番目のパラメータが" /etcであることがわかります。 /passwd"、ただし出力は成功しません。 !これはなぜですか? execl関数の機能:​​プロセスがexec関数を呼び出すと、プロセスは新しいプログラムに完全に置き換えられ、新しいプログラムはそのメイン関数から実行されます。 execを呼び出しても新しいプロセスは作成されないため、前後のプロセスIDは変更されていません。 Execは現在のプロセスの本体、データ、ヒープ、スタックの各セグメントを別の新しいプログラムに置き換えるだけです。現在のプロセスの本体、データ、ヒープ、スタックの各セグメントを別の新しいプログラムに置き換えます。現在のプロセスの本体が置き換えられたため、execlの後の文は、たとえexeclが終了しても実行されません。コードの一部を見て:
ルート@ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#猫-n execl_test.cpp 1の#include< unistd.h> 2の#include< stdio.hの> 3 #include< STDLIB.H> 4 int型のmain(int型ARGC、CHAR * ARGV [])であれば6 {7(ARGC< 2)8 {9(" perrorは、あなたが避難所、T入力ファイル名、もう一度お試し下さい! \\ n"); 10出口(EXIT_FAILURE); 11 12} 13 IF(EXECL(" ./file_creat"," file_creat",のargv [1]、NULL)< 0)14にperror(" EXECLエラー! "); 15リターン0; 16} 17ルート@ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#猫-n file_creat.cpp 1の#include< stdio.hの> 2 3の#include< STDLIB .H> 4 5の#include< SYS /types.hで> 6の#include< SYS /stat.h> 7の#include< fcntl.h> 8ボイドCREATE_FILE(CHAR *名)9 {10(レコード生成(IFファイル名、0666)< 0)11 {12 printf(「ファイル%sの作成に失敗しました。\\ n」、ファイル名); 13終了(EXIT_FAILURE); 14 } 15、それ以外16 {17 printf( "ファイル%s成功!\\ n"、ファイル名); 18} 19} 20 21 int main(int argc、char * argv [])22 {23 if(argc< 2) 24 {25のprintf("あなたが入力ファイル名を持っていない、;!再度試みる\\ n"ください); 26出口(EXIT_FAILURE); 27} 28 CREATE_FILE(ARGV [1]); 29出口(EXIT_SUCCESS); 30} 31 32ルートの@ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#G ++ execl_test.cpp -o execl_testroot @ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#G ++ file_cfile_copy file_copy.cpp file_creat.cppルート@ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#G ++ file_creat.cpp -o file_creatroot @ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#./execl_testあなた避難所、T入力ファイル名、再度お試しください!Successroot @ WL-MS-7673 :! /ホーム/WL /デスクトップ/C ++#./execl_test filecreateファイルのファイル成功ルートの@ WL-MS-7673:/ホーム/WL /デスクトップ/C ++#
						
Copyright © Windowsの知識 All Rights Reserved