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

也许我错过了什么?它让我疯狂!:)

4

2 回答 2

6

这是一个长期存在的错误: http ://d.puremagic.com/issues/show_bug.cgi?id=3425

您尝试做的事情肯定适用于非 Windows 操作系统,也应该适用于 Windows。我认为这是 CI/O 功能的 Digital Mars 实现中的一个错误,这些功能由std.stdio. 我以前曾尝试修复此错误,但从未成功确定其根本原因。

于 2011-04-07T18:00:39.667 回答
4

我不熟悉 type 命令,也许文件完成后它没有发送 EOF。在 Linux 中你只需要: ./test < file.txt

这是输入重定向。与将程序输出转换为标准输入的管道不同,这将文件转换为程序的标准输入。还有输出重定向,它获取程序的输出并将其存储在文件中。

./test > 输出.txt

于 2011-04-07T15:26:02.810 回答