我被指派用C++编写一个小型shell程序。它应该采用与常规bash shell相同的命令(例如mv、cmp等),然后使用fork()和exec()调用函数的bash版本。
我尝试了很多方法来调用这些函数,但我一直遇到这个问题:当文件与可执行文件位于同一目录下时,它可以工作(例如:“tail test.txt”),但当文件位于不同的目录下时,它不会工作(例如:“tail ~/Documents/test.txt”),并且它告诉我该文件不存在。确切措辞如下:
尾部:无法打开“~/文档/测试”。用于读取的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);
}
我尝试使用不同版本的exec,但遇到了需要
char *const[]
作为参数,因为文件路径是一个变量,所以它不会接受它。
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", args);
exit(1);
}
我尝试过的其他版本(未成功)有:
char *env[] = {"PATH=~/"};
execle("/usr/bin/tail", "tail", arg1.c_str(), "-n 5", NULL, env);
execlp("/usr/bin/tail", "tail", arg1.c_str(), "-n 5", NULL);
非常感谢您的帮助!