Язык программирования: стандартная проблема ввода или недоразумение? - PullRequest
8 голосов
/ 07 апреля 2011

Вот простая программа, которая читает строки из стандартного ввода и выводит их в стандартный вывод.

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 ]

6 голосов
/ 07 апреля 2011

Это давняя ошибка: http://d.puremagic.com/issues/show_bug.cgi?id=3425

То, что вы пытаетесь сделать, определенно работает в операционных системах, отличных от Windows, и должно работать и в Windows. Я думаю, что это ошибка в реализации в Digital Mars функций C I / O, которые заключены в std.stdio. Я пытался исправить эту ошибку раньше, но даже не смог определить ее основную причину.

4 голосов
/ 07 апреля 2011

Я не знаком с командой type, возможно, она не отправляет EOF, когда файл готов.В Linux вы просто делаете: ./test

Это перенаправление ввода.В отличие от трубопровода, который превращает вывод программы в стандартный ввод, он превращает файл в стандартный ввод программы.Существует также перенаправление вывода, которое принимает выходные данные программы и сохраняет их в файле.

. / Test> output.txt

...