我正在构建一个执行各种命令的小shell解释器,并通过分解我的进程来完成此操作。用EOF提供输入流
但是,我希望子进程停止等待标准输入流中的输入,并且它会通过预期EOF来实现。我如何故意将EOF推入该流?
更具体地说,如果我在此条件下循环:
while (fgets(&input, 1024, stdin) != NULL) { // .....
我怎样才能使其成为假的?
我正在构建一个执行各种命令的小shell解释器,并通过分解我的进程来完成此操作。用EOF提供输入流
但是,我希望子进程停止等待标准输入流中的输入,并且它会通过预期EOF来实现。我如何故意将EOF推入该流?
更具体地说,如果我在此条件下循环:
while (fgets(&input, 1024, stdin) != NULL) { // .....
我怎样才能使其成为假的?
不知道你的shell正在做什么 - 但我会认为这样做的方式是关闭fork()
的子端的“标准输入流”,然后不要再读它。如果你让一个孩子做了什么,为什么它回到主输入处理循环。
在伪代码
if (pid = fork())
{
// parent - wait for child to do it's thing and then process another command
}
else
{
// child
close(0);
// do some sort of command processing and then exit
}
听起来很合理。如何“关闭”C中的stdin? – 2009-05-27 14:57:15
fclose(),明白了 – 2009-05-27 14:59:47
正常的方法是在发送(父)端关闭流。
我会怎么做这样的事情? – 2009-05-27 14:50:20
你是怎么打开它的?通常,您可以使用close()系统调用或类似的方法。 – 2009-05-27 14:52:14
就像我说过的,我只是用fgets()读取字符串() – 2009-05-27 14:54:21
难道你只是关闭管道的另一端?
你需要给更多的信息。孩子的stdin是否与父母有联系(又名共同处理)?要么...? – dwc 2009-05-27 14:49:23
键入Ctrl-D? “的putchar(EOF)”? – 2009-05-27 14:50:14
@Chris EOF通常是一个#define -1 -1 – 2009-05-27 14:51:07