1

所以我是 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);
    }
4

3 回答 3

6

成功时,用您指定的命令execlp 替换当前进程。只有失败了才会返回。手册页应该清楚地说明这一点。

于 2013-06-12T05:25:19.247 回答
3

正如@Charles Bailey 所指出的,execlp()替换了当前流程。所以它在运行程序后永远不会返回。

如果你只想运行一些东西,一个简单的方法是system(): http: //linux.die.net/man/3/system

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

于 2013-06-12T05:30:02.487 回答
2

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

另一种选择是exec在调用fork.

fork() || execlp(...);
于 2013-06-12T05:29:15.313 回答