我在C中编写自己的shell。它相当简单,但我想再实现三个命令。首先是带或不带参数的命令,其输出被重定向到文件。第二种是带有或不带参数的命令,其输出附加到文件中。最后,一个带或不带参数的命令,其输入从文件重定向。
所有这些命令都可以使用系统调用freopen()
,dup()
和dup2()
来实现。
第一个命令的示例可以是ls -l > fileName.txt
。
这应该获取命令的输出并将其放在fileName.txt
。
第二个命令的示例可以是ls -l >> fileName.txt
。
这应该获取命令的输出并将其附加到文件fileName.txt
中的任何内容。
最后一个命令的示例可能是bc < file
。这将获取命令的输出并将其放入指定的文件中。
这不应该太难实现,但由于某种原因,我不知道该怎么做并且遇到了一些严重的麻烦。有人可以帮助我吗?
答案 0 :(得分:1)
我坚持原始系统调用。忘记freopen()
并使用open()
。 stdio例程使用FILE*
流,而系统调用使用整数文件描述符。混合两者保证严重的麻烦。 ; - )
重定向分为4个步骤
open()
文件重定向到/来自,返回fd
close()
要重定向的文件,0表示stdin,1表示stdout dup(fd)
fd由第一步open()
返回close(fd)
你不需要它enymore 诀窍是dup()
返回新文件描述符的最低可用整数。如果您刚刚关闭标准1
,它将返回1
,突然您的标准输出指向先前打开的文件。