使用重定向运算符后检索stdin<

时间:2009-10-26 20:24:23

标签: c redirect

对于编程作业,我们有以下要求:

  1. 它必须是用C语言编写的命令行程序。
  2. 需要从文本文档中读取文本。但是,我们要通过使用Unix重定向运算符<在运行程序时,而不是让程序加载文件本身。 (因此程序通过假装从stdin读取来读取文本。)
  3. 从文件中读取数据后,程序将在完成工作之前向用户询问一些额外信息。
  4. 经过大量研究,我无法找到一种方法来检索“旧”标准输入以完成第(3)部分。有没有人知道这是怎么回事?

    从技术上讲,第(3)部分是奖金部分的一部分,教师可能没有自己实施(这是非常冗长的),所以这可能是不可能的,这是他的疏忽。但是,我当然不想跳到这个结论。

3 个答案:

答案 0 :(得分:5)

在linux上,我会打开控制终端/ dev / tty。

答案 1 :(得分:3)

哪个操作系统?在Linux上,通常的技巧是检查stderr是否仍然连接到tty:

if (isatty(2))

如果是,则打开一个新的读取文件描述符到该终端:

new_stdin = open("/proc/self/fd/2", O_RDONLY);

然后将新文件描述符复制到stdin(关闭旧的stdin):

dup2(new_stdin, 0);

(如果stderr也被重定向,那么isatty(2)将返回false,你将不得不放弃。)

答案 2 :(得分:1)

如果你运行这样的程序:

myprog 3<&0 < filename

然后为您as a duplicate of stdin设置文件描述符3。我不知道这是否符合您的任务要求,但可能值得进行实验。