2016-03-20 2 views
0

私はCでシステムプログラミングを初めて行っています。 exec *関数ファミリの後にコードを実行したいと思いますが、正確には分かりません。exec *関数ファミリの後にコードを実行

フォークし、exec *関数の後にコードを実行しようとしていることを読んだことがあります。私はプロセスをフォークしましたが、exec *関数の後のコードはまだ動作しません。

ここに私のコードは、これまでのところです:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

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

printf("Programme de manipulation de recouvrement en C\n\n"); 
int status,infoStats; 
pid_t processusFils; 

//Usage du programme 
if(argc == 1){ 
    printf("USAGE : %s args1 ... argN \n\n",argv[0]); 
    exit(1); 
} 

processusFils = fork(); 
if(processusFils < 0){ 
    perror("Erreur fork du processus fils "); 
    exit(1); 
} 
if(processusFils == 0){ 

    execvp(argv[1],argv+1); 

    exit(0); 

} 

printf("Hello world \n"); 
return 0; 
} 

任意のアイデアしてください? ありがとうございました

+0

幸運私は、あなたが 'printf'が動作していない意味を前提としています。それにもかかわらず、あなたがここに投稿したものは私のために働く。 – WhozCraig

+0

@WhozCraig、はい、これは私の言いたいことです。 printf文はexec関数を呼び出した後には動作しません。 –

+0

どうすればよろしくお願いしますか? –

答えて

0

いくつかの編集の後、誰かがそれを必要とする場合は正解です。

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

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

printf("Programme de manipulation de recouvrement en C\n\n"); 
int nombre1,nombre2; 
pid_t processusFils; 

//Usage du programme 
if(argc == 1){ 
    printf("USAGE : %s args1 ... argN \n\n",argv[0]); 
    exit(1); 
} 


processusFils = fork(); 
wait(NULL); 
if(processusFils < 0){ 
    perror("Erreur fork du processus fils "); 
    exit(1); 
} 
if(processusFils == 0){ 
    execvp(argv[1],argv+1); 
    exit(0); 

} 
printf("Hello world \n"); 

return 0; 
} 

「子プロセス」の終了を待つために、待機(NULL)を追加するだけで済みます。その後、コードの実行を継続するのは親です。 `やや無意味である;`の出口(0)ので

ハジャル

+0

'wait()'の返り値をチェックするのに気をつけたら、子供に 'wait()'するのは良い考えではないことに気づいたでしょう。 – EOF

+0

@EOF:これは私が探しているものです。子プロセスが完了するのを待ってから、「親プロセス」がコードの実行を継続します。 私が私の例で探しているのは、私は一般的な話しでも、一般的な解決策も与えていない。 –

+0

いいえ、あなたも子供の*で待っています*。子は自分自身の子を持っていないので、子の 'wait()'はエラーを返し、無視します。これは良いデザインではありません。 – EOF