我正在C中實現一個shell,但是我遇到了文件重定向的問題。 我的問題是以下。如果我只輸入cat filename
,我的外殼將顯示該文件並返回以提示等待下一個命令。但是,運行cat < filename
後shell將退出。我的代碼已附加。文件重定向實現在C中實現重定向
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 }
部分
40 case 1:
42 vector<string> cmmd;
43 cout << "tokens size "<<tokens.size()<<endl;
44 for (vector<string>::iterator titer = tokens.begin(); titer != tokens.end(); titer++){
45 if (!(titer->compare("<"))) break;
46 cmmd.push_back(*titer);
48 }
51 int fd = open(tokens[pos[0]+1].c_str(), O_RDONLY);
52 dup2(fd, 0);
53 close(fd);
54 callExternals(cmmd);
55 }
什麼是錯我的代碼?由於
你爲什麼要搞亂fork前進程的文件描述符? – user2357112
我可能會看到你在說什麼。謝謝。 – Wei
我最初的目的是試圖重用callExternals函數。 – Wei