1

所以,我正在制作一个 Unix minishell,但遇到了障碍。我需要能够执行内置函数,所以我做了一个函数:

int exec_if_built_in(char **args)

它需要一个字符串数组(第一个是命令,其余是参数)。对于非内置命令,我只使用 execvp 之类的命令,但是我需要找到一种将第一个字符串映射到函数的方法。我正在考虑制作两个数组,一个是字符串,另一个是带有相应的函数指针。但是,由于其中许多功能会有所不同(返回和接受不同的东西),因此这种方法行不通。我还想过用名称属性和函数指针属性创建一个结构数组,但是由于我将使用的函数的不同性质,这将不起作用。

那么,根据字符串的输入执行函数的最佳方法是什么?如何将字符串映射到某个函数?我对函数指针不是很熟悉,所以我可能会遗漏一些东西。

谢谢你们的帮助:)

4

2 回答 2

3

我正在考虑制作两个数组,一个是字符串,另一个是带有相应的函数指针。

这是正确的做法。制作接受相同类型参数的包装器函数*然后从包装器内部调用“真实”函数。

如果您想“为风格赢得额外积分”,请按字母顺序对字符串数组进行排序,并对字符串数组使用二进制搜索。当两个数组变大时,这将使您节省一些 CPU 周期。


*也许您可以使用char **,因为这就是您的exec_if_built_in需要。

于 2012-10-07T03:35:28.970 回答
1

如果您的案例如此多样化以至于表驱动方法不合适,那么 if/else-if 级联可能是最好的解决方案。

if(!strcmp(args[0], "cat")) {
    /* cat a file */
} else if(!strcmp(args[0], "dog")) {
    /* dog a file */
} else if(!strcmp(args[0], "echo")) {
    /* create an echo chamber */
} ...
于 2012-10-07T03:33:17.553 回答