подать текстовый / html файл с помощью fread () в ответе HTTP в c - PullRequest
0 голосов
/ 26 сентября 2011

При создании ответа HTTP мне нужно прочитать файл, который я хочу обслуживать, в памяти.

Для двоичных файлов, таких как jpeg, я использую

//Setup and other headers omitted
stat(file, &fileStat);
int fileSize=fileState.st_size
sprintf(headerBuffer, "content-length: %u\r\n\r\n", fileSize)
fread(fileBuffer, fileSize, 1, filePtr);
//combine headerBuffer and fileBuffer, then send to socket

Однако яне знаю, как обращаться с текстовыми файлами, например html.Я запутался в этих двух вещах:

  • Является ли content-length размером файла или strlen(whole file as a string)?или это одно и то же?
  • Могу ли я по-прежнему использовать fread() для загрузки текстового файла или читать его построчно с fgets()?Я думал fread() только для чтения бинарных файлов, не так ли?

1 Ответ

2 голосов
/ 26 сентября 2011

Content-length - полная длина объекта, отправленного в ответе.Если вы отправляете файл, это размер файла (если только вы не применяете какую-либо кодировку содержимого, например, gzip, в этом случае это размер файла после кодирования).

Понятие «буквы» нене вводите изображение, и это не имеет смысла.HTTP не используется только для передачи текста, и то, что составляет букву, само по себе проблематично (например, кодировка, версия Unicode, если применимо, ...).

Наконец, вы, конечно, можете использовать fread вместоfgets.Нет причин посылать ответ построчно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...