如何解决C ++主调用execvp函数在调用ls或ls -l时给出错误
我必须编译一个minishell的main.cpp并处理ls,ls -l,pwd,cat等函数,因为这是使用fork和exec的,但是我现在被卡住了。子进程和父进程运行。我将命令保存在* args中。
char* args[com.numArgs() + 1];
cout << ">>>> ";
com.read();
cout << num++ << ")" << com << endl; //prompt for next command
for (int i = 0; i <= com.numArgs(); i++)
{
args[i] = (char*)com.args()[i].c_str();
}// makes array of commands
while (com.name() != "exit") // exits mini-shell
{
if (com.name() == "cd")
{
string dir_name;
dir_name = args[1];
int p = chdir(dir_name.c_str());
if (p == -1) //checking dir
{
cout << "dir not changed";
}
else
{
cout << "dir changed" << endl;
}
}
else
{
pid = fork(); //generate process
if (pid != 0) {
cout << "we are in parent" << pid << " " << getpid() << endl;
waitpid(pid,NULL,0);
cout << "child process excuted" << endl;
}
else if (pid ==0)//in child
{
cout << "Child" << pid << " " << getpid() << endl;
cout << "run exec here" << endl;
execvp(args[0],args);
cout << "execvp failed ! " << endl;
}
}
输出:
> project]$ ./proj1
>>>> ls
0)ls
ls
we are in parent20265 20264
Child0 20265
run exec here
ls: cannot access '': No such file or directory
child process excuted
但是,如果我先做cd ..那就行了
>>> cd ..
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。