我在C中实现了一个shell但是文件重定向有问题。
我的问题如下。如果我只输入Fn::FindInMap
,我的shell将显示该文件并返回以提示等待下一个命令。但是,shell将在运行cat filename
后退出。我的代码已附上。
cat < filename
部分文件重定向实现
75 int callExternals(vector<string>& tokens){
76 pid_t childPid;
77
78 char** cstrings = new char*[tokens.size() + 1];
79 for (size_t i = 0; i < tokens.size(); ++i){
80 cstrings[i] = new char[tokens[i].size() + 1];
81 strcpy(cstrings[i],tokens[i].c_str());
82 }
83 cstrings[tokens.size()] = NULL;
84 switch (childPid=fork()){
85 case -1:
86 perror("Unable to fork a process");
87 return -1;
88 case 0:
89 execvp(cstrings[0],cstrings);
90 //_exit(EXIT_SUCCESS);
91 default:
92 waitpid(childPid,NULL,0);
93 }
94 return 0;
95 }
我的代码出了什么问题?感谢
答案 0 :(得分:0)
这似乎是一个家庭作业问题......
据我所知,你正在提取完整的命令(没有“&lt; filename”)来执行,你试图在“&lt;”之后用文件名打开一个文件描述符。
下一行,51,毫无意义。
问题在于,一旦找到位置,就会忽略它,并且只是使用'pos [0]'(这是一些外部无关变量)来查找文件名。您需要获取“&lt;”后面的令牌的值获取文件名。