Я использую цикл while с getc() для чтения из дескриптора файла, и он отлично работает. Теперь я добавляю поддержку для труб.Как сделать getc() на stdin be двоичным
Моя проблема в том, что хотя x0A, X0D и x0A0D проходят очень хорошо, любые случаи x0D0A сводятся к просто x0A. Кроме того, x1A, кажется, полностью прекращает процесс, когда встречается.
Я собираюсь выполнить вывод tar и вворачивать файлы.
FILE *FH;
FH=stdin;
int buff;
while((buff=getc(FH))!=EOF) {
//stuff
}
Это упрощено, поскольку FH необходимо указывать либо на файл, либо на stdin. Для тестирования я просто пишу бафф в файл, чтобы увидеть изменения. Код работает отлично, если FH является файлом.
Я видел такое же поведение по использованию смол, типа и кошки в качестве источника трубы
Что OS вы? В Unix все потоки двоичные (перевод CRLF на '\ n' выполняется драйвером терминала, а не средой C). – Barmar
MS Windows XP SP3 с компилятором MinGW. – user1488660
Это можно сделать. NT5.1 отлично передает двоичные данные. Например, «cat testfile.bin | cat> output.bin» передает данные без изменений. Так же, используя команду native «type», то есть «type testfile.bin | cat> output.bin» – user1488660