язык программирования d: стандартная проблема ввода или недопонимание?


Вот простая программа, которая считывает строки из 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

Программа добавляет слово "тест" к каждой строке файла.txt и выводит их на консоль.

Однако я продолжаю получать ошибку в конце:

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

Может быть, я что-то упустил? Это сводит меня с ума! :)

2 8
dmd

2 ответа:

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

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

./тест > вывод.txt

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

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