Как создать буфер для чтения данных сокета в C

Отлично работает на моей установке MediaWiki 1.31.1.

На вашем месте я бы позаботился о том, чтобы кодировка LocalSettings.php не являлась проблемой, как предлагал @Tgr После сохранения откройте его в другом текстовом редакторе и обратите внимание, был ли он заменен нечитаемым символом или нет.

Не уверен, что уместны в этом случае, но в других местах проблемы были решены, убедившись, что php включил mbstring. Чтобы установить его в Debian, вы можете использовать apt install php-mbstring

6
задан Heat Miser 27 September 2008 в 06:30
поделиться

3 ответа

BUFSIZE должен быть равен размеру Вашего буфера в байтах. читайте (), прекратит читать, когда буфер полон. Вот пример:

#define MY_BUFFER_SIZE 1024

char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);
13
ответ дан 8 December 2019 в 13:03
поделиться

Как всегда, использовать sizeof когда у Вас есть шанс. Используя встроенный оператор sizeof, Вы просите, чтобы компилятор вычислил размер переменной, вместо того, чтобы указал его сами. Это снижает риск представления ошибок, когда размер фактической переменной отличается от того, что Вы думаете.

Так, вместо выполнения

#define BUFSIZE 1500
char buffer[BUFSIZE];
int n = read(sock, buffer, BUFSIZE);

действительно необходимо использовать

char buffer[1500];
int n = read(sock, buffer, sizeof buffer);

Заметьте, как Вам не нужна круглая скобка вокруг аргумента sizeof, если аргументом не является название типа.

5
ответ дан 8 December 2019 в 13:03
поделиться

Ваша реализация сокетов не требует буфера, чтобы быть достаточно большой, содержать все сообщение наверняка, но могло бы быть удобно в зависимости от, что Вы делаете.

0
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: