如何在 C 中获取 xterm 的命令行参数?

How to get Command line arguments for xterm in C?

我的代码如下打开 xterm 终端和 运行 ./paramax 可执行文件

#include <unistd.h>
#include <sys/ipc.h>

int main(int argc, char* argv[])
{
execl("/usr/bin/xterm", "/usr/bin/xterm", "-hold", "./paramax", (void*)NULL);
return 0;
}

现在的问题是 ./paramax 我需要给它一个命令行参数来执行。如何进行?

运行 xterm -e ./paramax arg and more args,直接或通过 exec 调用。

我认为您需要停止使用 execl() 并开始使用 execv()

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
    char *base_args[] = { "/usr/bin/xterm", "-hold", "./paramax", };
    enum { NUM_BASEARGS = sizeof(base_args) / sizeof(base_args[0]) };
    char *args[NUM_BASEARGS + argc];
    int i;
    for (i = 0; i < NUM_BASEARGS; i++)
        args[i] = base_args[i];
    for (int j = 1; j < argc; j++)
        args[i++] = argv[j];
    args[i] = 0;
    execv(args[0], args);
    fprintf(stderr, "%s: failed to execute %s (%d: %s)\n",
            argv[0], args[0], errno, strerror(errno));
    return 1;
}

这会在 args VLA(可变长度数组)中为基本参数(基本 xterm 命令和参数)以及该程序的每个命令行参数分配足够的指针(程序名除外),最后的null加一。然后它将各种参数列表复制到 args 中,然后运行程序,如果无法执行命令则报告错误并以失败(非成功)状态退出。测试 execv() 中的 return 值没有意义;如果它 returned,它失败了,如果它成功,它没有 return。

请注意,我假设您的基本 execl() 命令成功执行了 xterm,并且 xterm 成功运行了 ./paramax 程序,没有额外的参数。如果这不起作用,您将需要使用 base_args 选项列表,直到它起作用。然而,当我在 Linux (Ubuntu 14.04) 上使用仅包含 echo Hello World 的 shell 脚本 paramax 对其进行测试时,我得到了一个 xterm其中显示 Hello World。控件没有 return 到我 运行 的命令行,直到 xterm(它取代了原来的程序)退出。您可以在 execv() 代码之前使用 fork() 来解决这个问题,只要您在子项中执行 execv() 并从父项中退出即可。