D编程语言:标准输入问题或误解?

8

这里有一个简单的程序,它从标准输入读取行,并将它们输出到标准输出。

module test;

import std.stdio; 

void main(string[] args) 
{

    foreach (int i, string line; lines(stdin)) {
        writeln(line ~ " (test)");
    }
}

我正在使用Windows DMD编译器v2.052。
如果我执行:type file.txt | test.exe 该程序会将单词“test”附加到file.txt的每一行,并将它们输出到控制台。但是,我一直在最后遇到错误: std.stdio.StdioException@std\stdio.d(2138): Bad file descriptor 也许我漏掉了什么?
这真让我疯狂! :)

2
我不熟悉类型命令,也许它在文件完成时没有发送EOF。在Linux中,您只需要执行:./test < file.txt。 - he_the_great
哇,如果我使用以下命令:test.exe < file.txt问题就解决了。把你的评论变成答案,我会将其标记为解决方案:谢谢! - Redger
2个回答

6
这是一个长期存在的错误:http://d.puremagic.com/issues/show_bug.cgi?id=3425 在非Windows操作系统上,你正在尝试做的事情绝对可行,并且应该也可以在Windows上工作。我认为这是Digital Mars实现的C I/O函数中的一个bug,这些函数被std.stdio包装。我曾经试图修复这个错误,但从未成功地确定它的根本原因。

4
我不熟悉type命令,也许它在文件完成时没有发送EOF信号。在Linux中,您只需执行以下操作:./test < file.txt
这是输入重定向。与管道不同,管道将程序输出转换为标准输入,而输入重定向将文件转换为程序的标准输入。还有输出重定向,它将程序的输出存储在文件中。
./test > output.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接