我有一个方法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/