开发者

d programming language : standard input problem or misunderstanding?

Here is a simple program that reads lines from stdin and outputs them to stdout.

module test;

import std.stdio; 

void main(string[] args) 
{

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

I'm using the Windows DMD compiler v2.052.

If I do : type file.txt | test.exe

The program appends the word "test" to each line of file.txt and outputs them to the console.

However I k开发者_如何转开发eep getting an error at the end:

std.stdio.StdioException@std\stdio.d(2138): Bad file descriptor

Maybe I'm missing something? It drives me crazy! :)


This is a longstanding bug: http://d.puremagic.com/issues/show_bug.cgi?id=3425

What you're trying to do definitely works on non-Windows operating systems and should work on Windows, too. I think it's a bug in the Digital Mars implementation of the C I/O functions, which are being wrapped by std.stdio. I've tried to fix this bug before, but never even succeeded in identifying its root cause.


I'm not familiar with the type command, maybe it isn't sending EOF when the file is done. In Linux you just do: ./test < file.txt

This is input redirection. Unlike piping, which turns the program output into standard input, this turns the file into standard input of the program. There is also output redirection which takes the output of the program and stores it in a file.

./test > output.txt

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜