язык программирования 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 ответа:
Я не знаком с командой type, возможно, она не отправляет EOF, когда файл завершен. В Linux вы просто делаете: ./тестовый файл.txt
Это перенаправление ввода. В отличие от конвейера, который превращает вывод программы в стандартный ввод, это превращает файл в стандартный ввод программы. Существует также перенаправление вывода, которое принимает вывод программы и сохраняет его в файле.
./тест > вывод.txt
Это давняя ошибка: http://d.puremagic.com/issues/show_bug.cgi?id=3425
То, что вы пытаетесь сделать, определенно работает на операционных системах, отличных от Windows, и должно работать и на Windows. Я думаю, что это ошибка в цифровой реализации Mars функций C I / O, которые завернуты вstd.stdio
. Я пытался исправить эту ошибку раньше, но никогда даже не удавалось определить ее первопричину.