URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1647
[ Назад ]

Исходное сообщение
"Вывод бинарного файла на stdout в C/C++"

Отправлено Indigo , 26-Апр-03 20:04 
При чтении текстовых файлов, этот код работает верно, но при чтении бинарных файлов на stdout уходят левые символы, которые ни один браузер не воспринимает за картинки.

FILE * mFile;
mFile = fopen(f_path,"r");
while (feof(mFile) == 0) {
  char mc_buff[1024]="";
  fread(mc_buff,1024,1,mFile);
  fprintf(stdout,mc_buff);
};
fclose(mFile);

Может просто есть спец. функция для вывода на stdout бинарных файлов?


Содержание

Сообщения в этом обсуждении
"Вывод бинарного файла на stdout в C/C++"
Отправлено XMan , 27-Апр-03 00:09 
А ты прежде чем писать вопрос "man 3 fprintf" смотрел ? Ты в курсе, что после файла идет строка формата (так же как и в printf), а уж потом N-ое количество выводимых данных ? Можешь проверить - дать ему в файле f_path вместо бинарных данных, например, вот такую строку:

Test format: %X %d %s

Посмотришь, что он выдаст в результате, если конечно не свалится с "Segmentation fault" :)
Кстати, обычный printf тоже в stdout все выводит.

По хорошему, раз ты пользуешь fread то само напрашивается решение - для вывода пользуй fwrite :)


"Вывод бинарного файла на stdout в C/C++"
Отправлено Biwater , 27-Апр-03 00:11 
Для системы без разницы какие файлы выводить на stdout, будь они текстовые или бинарные. Этот код одинаково правильно работает во всех случаях. Другое дело, что в бинарных файлах находятся так называемые служебные сиволы, которые при выводе интерпретируются как призыв к тому или иному действию (возврат каретки, например, или символ конца строки). Тут кодировщик нужен UUEncoder, кажется так называется.  Кодируешь в текст бинарный файл и выводишь.



"Вывод бинарного файла на stdout в C/C++"
Отправлено XMan , 27-Апр-03 01:09 
Если ты говорил про оригинальный код, то смею несогласиться с утверждением: "Этот код одинаково правильно работает во всех случаях." Тот код работает только со строками, в которых отсутвуют коды меньше 20h и символ "%". О причине я писал в своем посте :)

"Вывод бинарного файла на stdout в C/C++"
Отправлено Indigo , 27-Апр-03 02:28 
Благодаря XMan всё решилось:

fwrite(mc_buff,1024,1,stdout);

Спасибо за помощь