【问题标题】:How to invoke an executable in the path /usr/bin using a C++ program?如何使用 C++ 程序调用路径 /usr/bin 中的可执行文件?
【发布时间】:2021-03-16 03:12:13
【问题描述】:

我在 linux 机器的路径 /usr/bin 中有一个基于 GUI 的可执行文件 这个可执行文件接受三个参数 - 两个整数值和一个字符

你能告诉我如何从用户空间 C++ 程序调用和运行这个可执行文件

【问题讨论】:

  • 也许使用终端来执行它,同时传递参数
  • Seriously popen() 用于 GUI 程序。不!糟糕的骗局。

标签: linux process


【解决方案1】:

不要无缘无故地回答这个问题

pid_t runprocess(int arg1, int arg2, char arg3)
{
    static const char program[] = "/usr/bin/...";
    char arg1c[12];
    char arg2c[12];
    char arg3c[2];
    sprintf(arg1c, "%d", arg1);
    sprintf(arg2c, "%d", arg2);
    arg3c[0] = arg3;
    arg3c[1] = 0;
    pid_t pid = vfork();
    if (pid == 0) {
        signal(SIGHUP, SIG_IGN); /* since it's a GUI program, detach from console HUP */
        close(0); /* and detach from stdin */
        if (open("/dev/null", O_RDWR)) _exit(137); /* assertion failure */
        execl(program, program, arg1c, arg2c, arg3c, NULL);
        _exit(errno);
    }
    return pid;
}

将参数构建为字符串,fork 并执行它。真的很琐碎。别忘了wait()

由于子进程是一个 GUI 进程,我们将 HUP 从我们可能运行或可能不运行的终端中分离出来,并将标准输入替换为 /dev/null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2012-07-21
    • 2023-03-05
    • 1970-01-01
    • 2013-01-03
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多