Linux 如何使用C+调用路径/usr/bin中的可执行文件+;节目?

Linux 如何使用C+调用路径/usr/bin中的可执行文件+;节目?,linux,process,Linux,Process,我在linux机器的路径/usr/bin中有一个基于GUI的可执行文件 此可执行文件接受三个参数—两个整数值和一个字符 您能告诉我如何从用户空间的C++程序调用并运行此可执行文件吗 pid_t runprocess(int arg1, int arg2, char arg3) { static const char program[] = "/usr/bin/..."; char arg1c[12]; char arg2c[12]; char

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


您能告诉我如何从用户空间的C++程序调用并运行此可执行文件吗

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和exec。真是微不足道。不要忘记等待()


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

可能使用终端来执行它,同时为GUI程序传递参数popen()。不!糟糕的欺骗。