c - 从 stdin 读取 execv 的参数? (C)

标签 c exec posix stdin argv

我有一个方法execfile,它获取可执行文件的路径,然后执行它,我现在尝试添加选项,以便用户向正在执行的命令输入参数。我目前的实现方式如下:

int execfile(char *file) {
    printf("Enter any arguments to %s: ", file);

    char *arg = (char *) calloc(ARG_MAX, sizeof(char));
    scanf("%s", arg);

    execl(file, file, arg, NULL);
    return -1;
}

这确实可以粗略地发挥作用,因为我可以执行 /usr/bin/ps 并在参数提示符下输入 el-el 并该函数将按预期使用两个参数执行。

理想情况下,如果能够像传统上直接执行 C 程序一样输入参数会更优雅,因此可以在提示符处输入 -e -l 并使其正确解释程序(目前这不起作用),或者直接按 Enter 跳过提示(目前必须输入至少一些字符)。

我认为最好的方法是声明一个数组char *argv[],设置arg[0] = file,然后扫描其余部分输入每个单独的参数并将其放置在数组单元格中,然后调用 execv(file, argv)。

但是,我对 C 非常陌生,不确定如何以最有效的方式实现这一点,例如,我正在考虑首先读取整个字符串,然后使用循环逐个字符地迭代它以进行识别要添加到 argv 的参数,但似乎有点啰嗦?有没有办法直接从 stdin 将这些参数读入数组?

此外,我不确定将 ARG_MAX 设置为什么,因为我不知道 C 中参数数量的限制是多少,而且我不知道如何让它识别已按下 Enter 键,所以立即跳过。

最佳答案

Is there no way to read these arguments into the array directly from stdin?

一口气,不知道将传递多少个空格分隔的参数,并且不需要额外的解析?

没有。

关于c - 从 stdin 读取 execv 的参数? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595777/

相关文章:

c - 无法从链表中弹出顶部元素

php - 如何通过 PHP 执行命令?

linux - 复制修改后的文件及其文件结构

c - 父进程终止后如何杀死所有子进程?

c - 异步非阻塞服务器套接字的效率

c - POSIX 系统上的 `fileno(stdout) != 1` 可能吗?

c - 从 C 中的文件描述符中检索文件名

java - 如何从 java 控制台运行控制台应用程序?

c - 多线程素数生成器

linux - 我的所有 inode 都在哪里使用?