Вывод бинарного файла на 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, 00:09 , 27-Апр-03 (1)
А ты прежде чем писать вопрос "man 3 fprintf" смотрел ? Ты в курсе, что после файла идет строка формата (так же как и в printf), а уж потом N-ое количество выводимых данных ? Можешь проверить - дать ему в файле f_path вместо бинарных данных, например, вот такую строку:Test format: %X %d %s Посмотришь, что он выдаст в результате, если конечно не свалится с "Segmentation fault" :) Кстати, обычный printf тоже в stdout все выводит. По хорошему, раз ты пользуешь fread то само напрашивается решение - для вывода пользуй fwrite :)
- Вывод бинарного файла на stdout в C/C++, Biwater, 00:11 , 27-Апр-03 (2)
Для системы без разницы какие файлы выводить на stdout, будь они текстовые или бинарные. Этот код одинаково правильно работает во всех случаях. Другое дело, что в бинарных файлах находятся так называемые служебные сиволы, которые при выводе интерпретируются как призыв к тому или иному действию (возврат каретки, например, или символ конца строки). Тут кодировщик нужен UUEncoder, кажется так называется. Кодируешь в текст бинарный файл и выводишь.
- Вывод бинарного файла на stdout в C/C++, XMan, 01:09 , 27-Апр-03 (3)
Если ты говорил про оригинальный код, то смею несогласиться с утверждением: "Этот код одинаково правильно работает во всех случаях." Тот код работает только со строками, в которых отсутвуют коды меньше 20h и символ "%". О причине я писал в своем посте :)
- Вывод бинарного файла на stdout в C/C++, Indigo, 02:28 , 27-Апр-03 (4)
Благодаря XMan всё решилось:fwrite(mc_buff,1024,1,stdout); Спасибо за помощь
|