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

时间:2016-11-14 18:52:06

标签: 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然后扫描输入的其余部分并将每个单独的参数放在一个数组单元格中,然后调用{{ 1}}。

我对C很新,但不确定如何以最有效的方式实现这一点,例如我正在考虑首先读取整个字符串然后使用循环逐个字符地迭代它识别要添加到execv(file, argv)的参数,但似乎有点长篇大论?有没有办法直接从argv

将这些参数读入数组

此外,我不确定将ARG_MAX设置为什么,因为我不知道参数数量的限制在C内,并且我不知道如何让它识别出按下了回车键,以便立即跳过。

1 个答案:

答案 0 :(得分:0)

  

有没有办法直接从stdin中将这些参数读入数组?

一次性,不知道会传递多少空白分隔的参数,而无需额外的解析?

没有