【问题标题】:Execlp doesn't return a number [duplicate]Execlp 不返回数字[重复]
【发布时间】:2016-03-13 19:37:25
【问题描述】:

我有 2 个程序,我需要第二个程序的值才能正确继续我的第一个程序。我用 execlp 调用了一个第二个程序,并将 kill 的数量保存在 ret 中,但没有正确返回该数字。 我可以帮忙吗?

第一次申请;

pid_t pid;
int ret=0;
pid = fork();
if(pid == 0){

    ret = execlp("/media/partilha/scomp1516t2dag02/modulo1/ex20/batota", "batota", (char*) NULL);
    if(ret == -1){
        printf("Erro da aplicação!");
        exit(0);
    }
}
wait(&estado);

第二次申请

int main(void){
    int ret;

    srand(time(NULL));
    ret = (rand() % 5) + 1;
    exit(ret);
}

【问题讨论】:

  • execlp 返回(除非出现错误)。
  • 不要经常在这个论坛上聊天,因为我的英语不是最好的,但是谢谢。当我遇到问题时如果有人能帮助我感激不尽。
  • waitreturns 之后,应该可以使用WEXITSTATUS(estado) 获取子进程的退出状态。你试过吗?
  • 已经正常工作,它缺少 WEXITSTATUS(状态)。谢谢。

标签: c


【解决方案1】:

execlp 系统调用不返回 除非有错误。它将用新程序替换您当前的程序(您的代码停在那里,被新程序替换)。

来自execlp() 的手册页:

“exec() 系列函数用新的进程映像替换当前进程映像”

也许你应该看看fork() 是如何工作的,它可以帮助你。 wait() 系统调用暂停调用进程的执行,直到其子进程之一终止。除了这里,你的进程没有子进程;使用fork() 制作一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 2017-07-22
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多