我正在为一个系统方案拟订班进行工作。 我对档案的重新定位感到有些麻烦。 我只是把产出转向工作,即工作。 然而,当我把像“编目”;a”这样的指挥打到我身上时,它就删除了档案中的所有内容。 如果说“fdin = 开放(_inputFile,777)的话,我也感到问题。
如果情况与建议的教学/其他实例挂钩,将受到高度赞赏。
在一旁,我包括整个功能,然而,在它创建管道的时候,我还没有在那里测试任何东西。 我不相信它会很好地发挥作用,但这可能来自另一个档案中的错误。
void Command:: execute(){
if(_numberOfSimpleCommands == 0){
prompt();
return;
}
//save input/output
int defaultin = dup(0);
int defaultout = dup(1);
//initial input
int fdin;
if(_inputFile){
fdin = open(_inputFile,0777);
}else{
//use default input
fdin = dup(defaultin);
}
//execution
int pid;
int fdout;
for(int i = 0; i < _numberOfSimpleCommands; i++){
dup2(fdin,0);
close(fdin);
//setoutput
if(i == _numberOfSimpleCommands -1){
if(_outFile){
fdout = creat(_outFile,0666);
}else{
fdout = dup(defaultout);
}
}else{
int fdpipe[2];
pipe(fdpipe);
fdout = fdpipe[0];
fdin = fdpipe[1];
}
dup2(fdout,1);
close(fdout);
//create child
pid = fork();
if(pid == 0){
execvp(_simpleCommands[0]->_arguments[0],_simpleCommands[0]->_arguments);
perror("-myshell");
_exit(1);
}
}
//restore IO defaults
dup2(defaultin,0);
dup2(defaultout,1);
close(defaultin);
close(defaultout);
if(!_background){
waitpid(pid,0,0);
}
}