возникли проблемы с сетевым заданием. Конечная цель - создать программу на C, которая захватывает файл с заданного URL-адреса через HTTP и записывает его в заданное имя файла. У меня это работает нормально для большинства текстовых файлов, но я сталкиваюсь с некоторыми проблемами, которые, как я подозреваю, происходят из одной и той же основной причины.
Вот быстрая версия кода, который я использую для передачи данных из дескриптора сетевого файла в дескриптор выходного файла:
unsigned long content_length; // extracted from HTTP header
unsigned long successfully_read = 0;
while(successfully_read != content_length)
{
char buffer[2048];
int extracted = read(connection,buffer,2048);
fprintf(output_file,buffer);
successfully_read += extracted;
}
Как я уже сказал, это прекрасно работает для большинства текстовых файлов (хотя символ% сбивает с толку fprintf, поэтому было бы неплохо иметь способ справиться с этим). Проблема в том, что он просто зависает навсегда, когда я пытаюсь получить нетекстовые файлы (.png - это основной тестовый файл, с которым я работаю, но программа должна уметь обрабатывать что угодно).
Я провел некоторую отладку, и я знаю, что я не перехожу через content_length, не получаю ошибки во время чтения и не сталкиваюсь с узким местом в сети. Я посмотрел онлайн, но весь код ввода / вывода C-файла, который я могу найти для бинарных файлов, кажется, основан на идее, что вы знаете, как структурированы данные внутри файла. Я не знаю, как это устроено, и мне все равно; Я просто хочу скопировать содержимое одного файлового дескриптора в другой.
Может ли кто-нибудь указать мне на некоторые встроенные функции ввода / вывода файлов, которые я могу использовать для этой цели?
Редактировать: Альтернативно, есть ли в заголовке HTTP стандартное поле, которое сообщит мне, как обрабатывать любой файл, с которым я работаю?