我将如何正确关闭文件描述符?我目前要写一个简单的unix shell。例如,如果用户输入sort < someFile
,则我有以下代码:
freopen(commandArg[<location + 1],"r",stdin);
executeArg(commandArg);
fclose(stdout);
当我用execvp和所有内容执行命令时,如果我退出程序,它可以正常工作。但是如果我想继续循环并继续获取命令我的程序失败,我得到错误:
sort: write error: Bad file descriptor
sort: fflush failed: standard output: Bad file descriptor
我已经读到它与fclose(stdout)
有关,因为当它再次运行while
循环时,它会在我已经关闭它之后尝试打开(我认为)。我已经尝试将fclose(stdout)
放在程序的最后但仍然会出错。
编辑:我已经尝试取出fclose(stdout)
,但是当我这样做时,我的代码似乎因某种原因而无法循环。像ls
这样的命令不会继续循环。