gpt4 book ai didi

c++ - 构建 shell - IO 问题

转载 作者:行者123 更新时间:2023-11-28 08:16:15 24 4
gpt4 key购买 nike

我正在为系统编程类(class)编写 shell。我在文件重定向方面遇到了一些麻烦。我刚刚将输出重定向到工作中,例如“ls > a” 但是,当我在我的 shell 中键入“cat < a”之类的命令时,它会删除文件中的所有内容。我觉得问题源于第二个 if 语句 - “fdin = open(_inputFile,777)”

如果是这种情况,我们将不胜感激推荐教程/其他示例的链接。

附带说明一下,我包含了整个函数,但是在它创建管道时,我还没有测试任何东西。我也不相信它能正常工作,但这可能是另一个文件中的错误造成的。


无效命令::执行(){



 if(_numberOfSimpleCommands == 0){

迅速的();
返回;
}

//保存输入/输出
int defaultin = dup(0);
int defaultout = dup(1);

//初始输入
内部输入;
如果(_inputFile){
fdin = open(_inputFile,0777);
}别的{
//使用默认输入
fdin = dup(默认输入);
}

//执行
内部进程;
内部输出;
for(int i = 0; i < _numberOfSimpleCommands; i++){
dup2(fdin,0);
关闭(fdin);

//设置输出
如果(我==_numberOfSimpleCommands -1){
如果(_outFile){
fdout = creat(_outFile,0666);
}别的{
fdout = dup(默认输出);
}
}别的{
int fdpipe[2];
管道(fdpipe);
fdout = fdpipe[0];
fdin = fdpipe[1];
}
dup2(fdout,1);
关闭(fdout);

//创建 child
pid = fork();
如果(pid == 0){
execvp(_simpleCommands[0]->_arguments[0],_simpleCommands[0]->_arguments);
错误(“-myshell”);
_退出(1);
}
}
//恢复IO默认值
dup2(默认输入,0);
dup2(默认输出,1);
关闭(默认);
关闭(默认输出);

如果(!_背景){
waitpid(pid,0,0);
}
}

最佳答案

您调用 open(_inputFile, 0777) 不正确。 open 的第二个参数应该包含指定访问模式和文件创建标志等值的按位或组合(O_RDONLYO_WRONLY 等)。由于您传递的是 0777,它可能最终包含 O_CREATO_TRUNC,这导致 _inputFile 成为删除。您可能需要 open(_inputFile, O_RDONLY)

关于c++ - 构建 shell - IO 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com