Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C函数执行Shell内置命令?_C_Shell_Command_Exec_Pwd - Fatal编程技术网

如何使用C函数执行Shell内置命令?

如何使用C函数执行Shell内置命令?,c,shell,command,exec,pwd,C,Shell,Command,Exec,Pwd,我想通过类似execv()的C语言函数执行Linux命令“pwd” 问题是没有名为“pwd”的可执行文件,我无法执行“echo$pwd”,因为echo也是一个内置命令,找不到可执行文件。您应该执行sh-c echo$pwd;通常sh-c将执行shell命令 (事实上,system(foo)被定义为execl(“sh”、“sh”、“c”、foo、NULL),因此适用于shell内置。) 如果您只需要PWD的值,请使用getenv。您可以使用EXECCL命令 int execl(const char

我想通过类似execv()的C语言函数执行Linux命令“pwd”


问题是没有名为“pwd”的可执行文件,我无法执行“echo$pwd”,因为echo也是一个内置命令,找不到可执行文件。

您应该执行
sh-c echo$pwd
;通常
sh-c
将执行shell命令

(事实上,
system(foo)
被定义为
execl(“sh”、“sh”、“c”、foo、NULL)
,因此适用于shell内置。)


如果您只需要
PWD
的值,请使用
getenv

您可以使用EXECCL命令

int execl(const char *path, const char *arg, ...);
如图所示

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {

   return execl ("/bin/pwd", "pwd", NULL);

}
#包括
#包括
#包括
内部主(空){
返回execl(“/bin/pwd”,“pwd”,NULL);
}
第二个参数是流程的名称,它将出现在流程表中

或者,可以使用getcwd()函数获取当前工作目录:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#define MAX 255

int main (void) {
char wd[MAX];
wd[MAX-1] = '\0';

if(getcwd(wd, MAX-1) == NULL) {
  printf ("Can not get current working directory\n");
}
else {
  printf("%s\n", wd);
}
  return 0;
}
#包括
#包括
#包括
#定义最大值255
内部主(空){
字符wd[MAX];
wd[MAX-1]='\0';
if(getcwd(wd,MAX-1)==NULL){
printf(“无法获取当前工作目录\n”);
}
否则{
printf(“%s\n”,wd);
}
返回0;
}

如果您只想在c程序中执行shell命令,可以使用

   #include <stdlib.h>

   int system(const char *command);

问题是没有名为“pwd”的可执行文件,我无法执行“echo$pwd”,因为echo也是一个内置命令,找不到可执行文件

你这是什么意思?您应该能够在/bin/

sudo find / -executable -name pwd
sudo find / -executable -name echo

男人得到了CWD。这就是你所需要的。Charlie Burns,提供给我的虚拟机缺少getcwd的条目。无论如何,谢谢你。我对这类事情还是新手。我尝试在shell上使用“which pwd”,它只返回“pwd”是一个内置命令。无论如何,谢谢你!请原谅我可能的无知,但这只会返回返回代码而不是标准输出,对吗?@Jpatrick你是对的<代码>系统有助于执行shell命令,还能够通过几个其他系统调用读取返回代码。如果您想读取程序的标准输出,则需要使用popen():我使用了getenv函数。非常感谢。
sudo find / -executable -name pwd
sudo find / -executable -name echo