C zlib gzfwrite () альтернатива? - PullRequest
0 голосов
/ 02 мая 2020

Я работаю над заданием для класса, которое включает в себя отправку двоичных данных .gz с сервера на клиент с использованием сокета. На стороне клиента он получает поток и сохраняет его в неподписанном буфере символов. Как я могу записать эти сжатые данные в новый файл .gz на стороне клиента?

Я не могу использовать gzfwrite (), потому что он был добавлен в 2017 году и старые машины задницы, которые они используют здесь для оценки в моей программе нет недавно обновленной zlib. Любая попытка его использования приводит к «неопределенной ссылке».

Я пытался использовать fopen ():

FILE *gz = fopen("test.gz", "wb");  // create new .gz on client end
fwrite(buffer, 1, buflen, gz);  // buffer contains binary data sent from server
fclose(gz);

, но вызов gunzip для получающегося .gz не удался, так как file test.gz выходы test.gz: data; так как он не распознается как файл .gz.

Я не думаю, что gzprintf () тоже будет работать, так как ожидает строку с нулевым окончанием, и у меня есть двоичные данные. В идеале я хотел бы просто отправить .gz с сервера и записать эту информацию в новый файл .gz на клиенте. Есть предложения?

1 Ответ

1 голос
/ 11 мая 2020

Используйте gzwrite(gz, buffer, buflen) вместо. Эта функция существует с незапамятных времен.

...