所以这是我的代码给我带来的问题:
void childProcessHandler(string command){
int argCounter = 0;
for(int i=0; i!=command.size(); i++)
argCounter+=( command.at(i) == ' ');
char * temp, *token;
char *childArgs[argCounter];
argCounter = 1;
temp = new char [command.size()+1];
strcpy (temp, command.c_str());
token = strtok (temp," ");
childArgs[0] = token;
while (token!=NULL)
{
token = strtok(NULL," ");
childArgs[argCounter] = token;
argCounter++;
}
//delete[] temp; //Should remove token as well?
execvp(childArgs[0], childArgs);
cout<<"PROBLEM!"<<endl;
exit(-1);
}
在 main() 方法中,我的代码到达一个点,它 forks() (父进程然后等待子进程退出。)然后子进程(进程 ID == 0 是吗?)调用方法 childProcessHandler 与用户输入(运行命令 + args)作为它的参数。然后我标记用户输入并在其上调用 execvp。
一切都编译并执行。execvp 之后的行永远不会到达,因为 execvp 仅在出现错误时才返回是吗?
该项目是模拟一个unix终端但是当我给它命令“日期”时,没有任何东西像它应该的那样被打印出来......子进程退出并且父进程恢复得很好但是没有任何东西被发送回终端窗口......
我究竟做错了什么?
(我们也被“推荐”使用 strtok 来标记它,但如果有人有更简单的东西,我愿意接受意见。)
谢谢!
编辑
例如,如果我输入“日期”而不是“日期”,则上述代码有效。我认为“标记器”没有在 childArgs[] 数组的末尾放置空字符可能有些可疑。我会解决这个问题,并感谢您的快速回复!
(忍者编辑,暂时还注释掉了delete[] temp)