c - 在 Unix 环境中,有没有办法以编程方式在 C 中调用 Which?

标签 c unix

<分区>

对于 C 语言的项目,我们需要在 Unix 服务器上构建一个 shell。

它需要能够执行 Unix 原生的功能,而不是 bash(或任何其他 Unix shell)。

我正在编写一种方法,希望将对命令的调用泛化。进入一般功能:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <limits.h>

void execCmd(char* cmd,char* options)
{
   char directory[MAX_CANON] = "/bin/"; //currently is just set to /bin
   char* toExec = strcat(directory,cmd);

我想将变量“目录”设置为我正在调用的 Unix 命令的正确目录。

所以,本质上,我希望能够使用类似 字符目录[MAX_CANON] = which(cmd);

这样 which 函数将返回我尝试调用的命令的目录。

如果您觉得这不是一个好的解决方案,请推荐其他方式。

谢谢

编辑:我想最坏的情况是我可以做大量的 if-else 语句,根据 cmd 参数设置“目录”vbl。

最佳答案

你要的是命令'which',即

me@stackoverflow:~$ which which
/usr/bin/which

在 linux 上它是一个 shell 脚本,所以看一看。

但是,我认为这不是制作 UNIX shell 所必需的。如果你输入

man 3 exec

您会发现 execlp() 和 execvp() 负责为给定命令搜索 PATH 并执行它的细节。

关于c - 在 Unix 环境中,有没有办法以编程方式在 C 中调用 Which?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/535438/

相关文章:

c - 是否有一个C代码片段,可以在不使用编译器内置函数的情况下有效地计算溢出安全加法?

c - 在c中实现管道,但它不起作用

c - 自动将一个套接字转发到另一个套接字

flash - 可以通过终端在 headless 服务器上启动 Flash 视频播放

linux - awk 解析输出并提取值

c - BSD 上的 nftw 有何不同?

c - 在 Linux 中从应用程序调用函数到动态加载库时无法将 void ponter 作为函数参数

c - 使用复合文字用值初始化数组中的所有元素

c - typedef struct 让指针成为下一个指向节点是什么意思?

c - 在 C 中,缺少 "Main process ends"到 "call any functions registered with atexit"之间的链接