在指定路径之前设置显示(execlp)

时间:2014-10-07 02:01:07

标签: c linux executable displayobject

我需要使用execlp calls ()中的多个显示。我正在尝试这个:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("calling to execlp:\n\n");
    execlp("DISPLAY=:0 /usr/bin/qtdisplay","qtdisplay", "-r", NULL);
    execlp("DISPLAY=:1 /usr/bin/qtdisplay","qtdisplay", "-r", NULL);

    printf("fail!");
    exit(0);
}

但是这失败了,并显示以下消息:execlp: No such file or directory 有没有办法使用显示器?

1 个答案:

答案 0 :(得分:0)

尝试使用system(),它会启动一个新的子进程并从那里调用exec()。此外,它通过调用shell并将shell构造处理到该shell来处理shell命令行构造,如下所示:

system("DISPLAY=:0; /usr/bin/qtdisplay -r");

另外,学会检查这样的函数的返回代码,并做一些理智的操作(比如打印错误信息):

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int rc;

    rc = system("DISPLAY=:0; /usr/bin/qtdisplay -r");
    if (rc == -1) {
        perror("error starting qtdisplay on :0");
        exit(1);
    }
    rc = system("DISPLAY=:1; /usr/bin/qtdisplay -r");
    if (rc == -1) {
        perror("error starting qtdisplay on :1");
        exit(1);
    }
    exit(0);
}

如果您希望这两个命令并行运行(不是一个接一个),您应该使用如下命令行:

system("DISPLAY=:0; /usr/bin/qtdisplay -r &");