c - 如何使用c程序判断用户输入的命令是否存在于linux中

标签 c linux shell command-line command

<分区>

我正在做这个让用户输入 c 字符串的程序,然后我想创建一个函数来检查用户输入的字符串是否是 linux 命令。 前任。 用户:猫 输出:cat 是一个命令

用户:你好 输出:你好不是命令

等...

有人告诉我可以使用 execvp,但我不想执行命令只是为了弄清楚它是否存在,我只想确定它是否存在。

我想有人可以利用 linux 的 whereis 命令来输出特定命令的位置,但是我不知道如何在 c 中实现它。

我还被告知 stat() 可以工作,但我不确定如何工作,因为它的 marcos 只针对目录和文件进行更改。 cat 文件之类的命令也是如此吗?如果是这样,当我像这样运行 stat 时:

stat( 命令, &buff );

我不需要 cmd 的路径吗?

总体而言,我如何确定用户是否使用 c 在 linux 中输入了有效命令并让解决方案相对有利?

最佳答案

您可以结合使用 Linux which 命令和 C 函数 popen:

char testCmd[100];
char usrCmd[100];

strcpy(testCmd, "which ");
strcpy(usrCmd, "cat hello.txt");
strncat(testCmd, usrCmd, 93);

char path[100];
FILE *p = popen( testCmd , "r");
if(p ) {
    while(fgets(path, sizeof(path), p) != NULL) {
        printf("%s", path);
    }
}

which 命令返回其参数的路径,传递 cat hello.txt 似乎也有效。如果您期待像输出重定向这样令人讨厌的事情,那么只将用户输入的第一个单词发送到 which 是有意义的。

which 打印命令的路径(如果它在路径中)或换行符(如果找不到命令)。

关于c - 如何使用c程序判断用户输入的命令是否存在于linux中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35364414/

相关文章:

linux - Linux 中 GUI Emacs 中的换行

linux - my.cnf 中不存在 max_connection

windows - psExec 的密码不起作用,但密码标志的空字符串不起作用

c - 无法发现C代码中的错误

c - 不透明函数调用在编译器优化中意味着什么?

c - 有没有一种好方法可以改变用 fork() 创建的子进程的执行顺序?

c++ - 如何在 Unix 控制台或 Mac 终端中编译和运行 C/C++ 代码?

linux - terminfo 延迟/填充如何在 TTY 中实现?

linux - 与 cat 相比,Bash while read 循环非常慢,为什么?

linux - "$$"在shell脚本中是什么意思?