我正在做这个让用户输入 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
打印命令的路径(如果它在路径中)或换行符(如果找不到命令)。