execlp后为什么不返回?这是正常的吗?

时间:2013-06-12 05:20:50

标签: c linux

所以我是C的新手,这是我遇到的一个问题,无法理解。首先,execlp()仅使用参数通过名称(通过搜索它)执行程序。这里我想用“-u”作为参数执行“who”,但它不会从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);
    }

3 个答案:

答案 0 :(得分:6)

成功时,execlp 使用您指定的命令替换当前进程。它只会在失败时返回。该联机帮助页应该清楚说明。

答案 1 :(得分:3)

如@Charles Bailey所述,execlp()取代了当前的流程。所以它在运行程序后永远不会返回。

如果您想运行某些内容,可以采用system()的简单方法:http://linux.die.net/man/3/system

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

答案 2 :(得分:2)

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

调用exec后,另一个选项是fork

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