C语言 如何返回控制表单可执行文件



这是我的代码:

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返回或任何其他为我做同样事情的系统调用。现在我按回车键,我的程序接管,但我想这样做而不必按回车键。

我没有足够的代表来发布图像,所以这里有一个指向我的输出的链接:http://tinypic.com/r/6szw52/5

当你调用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 childn");
        execlp("./hello",argv[0],NULL);
    printf("after execlp in childnn");
    sleep(2);
  }
  else {
    wait(NULL);
    printf("parrent finishn");
  }
  return 0;
}

在 execlp 之后可用的 printf 将不会执行。

最新更新