繁体   English   中英

为什么在execlp之后它不返回? 正常吗

[英]Why it does not return after execlp? Is it normal?

所以我是C语言的新手,这是我遇到的一个无法理解的问题。 首先,execlp()仅通过名称(通过搜索)来执行带有参数的程序。 在这里,我想以“ -u”作为参数执行“谁”,但它不会从execlp返回任何内容。 为什么? 这正常吗?

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

    main()
    {
        int j = 0;
        if(fork() == 0)
        {
            j++;
            if(execlp("who", "who", "-u", (char*)0) == -1)
            {
                j++;
            }
            else
            {
                printf("\nStoinostta na j = %d", j);
                return;
            }
        }   
        else
        {
            --j;
            printf("\nStoinostta na j=%d", j);
        }
        printf("\nStoinostta na j ravno na %d", ++j);
    }

成功执行后, execlp 用您指定的命令替换当前进程。 它只会在失败时返回。 手册页应对此进行明确说明。

如@Charles Bailey所指出, execlp()替换了当前进程。 因此,它从不会在运行程序后返回。

如果您只想运行某些程序,一种简单的方法是使用system()http : //linux.die.net/man/3/system

如果要运行某些东西并控制输入和输出(可能从命令收集输出),那么一个好方法是popen()http : //linux.die.net/man/3/popen

也许您想要system功能。 它将运行另一个程序,然后返回。

另一种选择是在调用fork之后exec

fork() || execlp(...);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM