小编nic*_*ick的帖子

使用 exec 在 C++ 中执行 shell 命令

我被分配用 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)

c++ linux bash shell system-calls

3
推荐指数
1
解决办法
3768
查看次数

标签 统计

bash ×1

c++ ×1

linux ×1

shell ×1

system-calls ×1