在C中实现重定向

时间:2016-09-23 19:08:05

标签: shell

我在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 }

我的代码出了什么问题?感谢

1 个答案:

答案 0 :(得分:0)

这似乎是一个家庭作业问题......

据我所知,你正在提取完整的命令(没有“&lt; filename”)来执行,你试图在“&lt;”之后用文件名打开一个文件描述符。

下一行,51,毫无意义。

问题在于,一旦找到位置,就会忽略它,并且只是使用'pos [0]'(这是一些外部无关变量)来查找文件名。您需要获取“&lt;”后面的令牌的值获取文件名。