0

ここに私の最初のファイルがあります:

int main(int argc, char *argv[]){

printf("\n\nJe suis dans le fils\n\n");

execl("/exec","ii",NULL);

printf("\n\nJe suis revenu dans le fils\n\n");
}

そして、これが実行ファイルです:

int main(int argc, char *argv[]){

printf("\n\n\n\nJe suis dans le exec\n\n\n\n");
printf("\n\n argc = %d \n\n argv[0] = %s \n\n argv[1] = %s",argc,argv[0],argv[1]);

}

問題 :

私はexecファイルでブロックされているので、 1sファイルのprintf私の後は表示さexeclれません:/また、argv [0]のprintfを通常実行すると、ファイルパスが表示されるはずですが、ここでは表示されます「イ」

4

1 に答える 1

3

私はexecファイルでブロックしているので、1sファイルのexeclの後のprintfは表示されません

そうです、execl戻りません (エラーがない限り)。いったんexec戻ることはありません。事実上、プロセスは別のプロセスに変わり、別のプログラムを実行します。

argv[0] の printf を実行すると、通常はファイル パスが表示されるはずですが、ここでは「ii」と表示されます。

あなたが理解したargv[0]ように、当然のことと考えるべきではありません。親プロセスは、必要なものを何でも指定できます (省略してもかまいません)。あなたの場合argv[0]、子を として指定しますii。正しく設定したい場合は (それが何であれ)、2 番目の を追加し"/exec"ます。


補足: 何かを実行する簡単な方法が必要な場合は、標準system(3)popen(3)関数を調べることをお勧めします。

于 2013-08-30T19:39:01.687 に答える