我正在为家庭作业编写自己的外壳,并且遇到了这个问题:
每当我输入将输出重定向到文件的命令时(即 ls -al > output.txt),我的 shell 应该处理该命令并重定向输出。但是,我不断收到此消息:ls: write error: Bad file descriptor
我在其他一些论坛上看到它可能与超出内存量有关,但我不明白这可能是什么问题。这是我的一些代码(如果您需要更多代码以了解清楚,请随时询问):
loc[0] = argv[0]; //used for execution
while(argv[count] != 0){ //loop through commands
if(strcmp(argv[count], "<") == 0) //and test for certain flags
inFlag = 1;
else if(strcmp(argv[count], ">") == 0){
argv[count] = argv[count+1] = 0;
outFlag = 1;
}
else if(strcmp(argv[count], "&") == 0)
bgFlag == 1;
else if(strcmp(argv[count], "|") == 0){
argv[count] = 0;
loc[pipes+1] = argv[count+1];
pipes++;
}
count++;
}
for(k = 0; k <= pipes; k++){
if(j < pipes){
pipe(r_tube);
j++;
}
pid = fork();
if(pid > 0){
if(j > 0){
close(l_tube[0]);
close(l_tube[1]);
}
l_tube[0] = r_tube[0];
l_tube[1] = r_tube[1];
}
else if(pid == 0){
if((k == 0) && (inFlag == 1)){
int n = open("input.txt", "r");
close (0);
dup (n);
close (n);
}
else if((k > 0) && (k < pipes)){
}
else if((k == pipes) && (outFlag == 1)){ //<-----issue
int out = open("output.txt", 0666);
close (1);
dup (out);
close (out);
}
else if(k == pipes){
}
execvp(argv[loc[k]], &argv[loc[k]]);