我一直在努力理解execve命令,我遇到了一个问题,我已经缩小了范围.我感到困惑的是,为什么execve不能与"哪个"命令一起工作,而与其他命令(如"ls")一起工作得很好.我直接从Bashshell 获得了这些可执行文件的路径.
以下是不适用于"Which"的代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
char *cmd_args_joined[] = {"which", "ls", NULL};
char cmd_plus_path[] = "/usr/bin/which";
if (execve(cmd_plus_path, cmd_args_joined, NULL) < 0)
{
perror("failed at execve\n");
exit(1);
}
return (0);
}
下面是与"ls"一起工作的代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
char *cmd_args_joined[] = {"ls", NULL};
char cmd_plus_path[] = "/bin/ls";
if (execve(cmd_plus_path, cmd_args_joined, NULL) < 0)
{
perror("failed at execve\n");
exit(1);
}
return (0);
}
我非常感谢任何能帮助我理解和解决这个问题的见解或建议.谢谢!
我最初怀疑我可能无意中将标准输出重定向到了另一个文件.然而,鉴于上面的代码没有使用dup2()进行重定向,我必须得出结论,我最初的假设是不正确的.