0

これは私のコードです:

void function_exists(int foo)
{
    char bar[10] = "/bin/";
    int baz;
    strncat(bar,act_arg[0],sizeof(act_arg[0]));
    if(fork() == 0)
    {
        printf("\n");
        baz = execlp(bar,act_arg[0],NULL);
        if(baz == -1)
        {
            foo++;
            wait(NULL);
        }
        else
        {
            wait(NULL);
            exit(0);
        }
    }
    fflush(stdout);
    printf("Hello");
}

私は execlp からコントロールを返そうとしていますが、エラーが発生しない限り値を返さないことを知っているので、フォークを使用しました。しかし、コードを実行すると hello が最初に出力されます。

exec return または同じことを行う他のシステム コールを作成する方法はありますか。

画像を投稿するのに十分な担当者がいないので、ここに私の出力へのリンクがあります: http://tinypic.com/r/6szw52/5

4

1 に答える 1

0

execlpを呼び出すと、子プロセス領域がexeclpによって上書きされるため、 execlp以降のコードは実行されません。

メインループで待機すると、目的の結果が得られます

このコードを調べると、より多くのアイデアが得られます。

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

int main(int argc, char *argv[])
{
  pid_t child;
  child = fork();
  if(child == 0) {
    printf("at child\n");
        execlp("./hello",argv[0],NULL);
    printf("after execlp in child\n\n");
    sleep(2);
  }
  else {
    wait(NULL);
    printf("parrent finish\n");
  }
  return 0;
}

execlp の後に使用できるprintfは実行されません。

于 2013-09-26T18:28:14.207 に答える