我被分配用 C++ 编写一个小型 shell 程序。它应该采用与常规 bash shell 相同的命令(例如:mv、cmp 等),然后使用 fork() 和 exec() 调用该函数的 bash 版本。
我尝试了多种调用函数的方法,但我不断遇到这个问题:当文件与可执行文件位于同一目录中时,它可以工作(例如:“tail test.txt”),但是当文件是在不同的目录中它不存在(例如:“tail ~/Documents/test.txt”)并且它告诉我该文件不存在。准确的写法是:
tail:无法打开“~/Documents/test.txt”进行读取:没有这样的文件或目录
但该文件确实存在,并且相同的命令可以在常规 bash shell 中运行。
现在我真的迷失了,它应该适用于任何目录中的文件,而且我不知道我在这里做错了什么。
这是相关代码(所有命令几乎相同):
pid_t pid = fork();
if(pid > 0)
{
wait(NULL);
}
else if(pid == 0)
{
execl("/bin/mv","mv", arg1.c_str(), arg2.c_str(), NULL);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同版本的 exec,但是我遇到了需要char *const[]as 参数的命令的问题,因为文件路径是一个变量,它不会接受它。
char *const args[] = {"/usr/bin/tail", arg1.c_str(), "-n 5", NULL}; // error here
pid_t pid = fork();
if(pid > 0)
{
wait(NULL);
}
else if(pid == 0)
{
execv("/usr/bin/tail", …Run Code Online (Sandbox Code Playgroud)