8

以下は、stdin から行を読み取り、stdout に出力する簡単なプログラムです。

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

プログラムは、file.txt の各行に「test」という単語を追加し、それらをコンソールに出力します。

ただし、最後にエラーが発生し続けます。

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 > output.txt

于 2011-04-07T15:26:02.810 に答える