Я пытаюсь прочитать сообщение (строка/текст) с сервера, и я установил размер буфера очень большой (buffer_size = 1000), так что мне нужно только один раз прочитать его с сервера.
Поэтому мой вопрос заключается в том, что сообщение составляет ровно 10 байт, и я вызываю read (socket, buffer, buffer_size), тогда он будет читать только 10 байт, так как он меньше фактического размера буфера? Наверное, мне просто интересно узнать о поведении вызова в случае, если прочитанное на самом деле не такое, как ожидалось.
Также, если я снова вызову read(), перезапишет ли он что-то в буфере? Под этим я подразумеваю пустой буфер и перезаписывать его новым вводом.
Предположительно вы используете TCP, который является потоковым протоколом - границы сообщений не отправляются, а только поток байтов. Поэтому, даже если сервер делает одну запись, вам может понадобиться сделать несколько чтений для получения данных.
Продолжайте читать до тех пор, пока у вас не будет достаточно байтов или не будет прочитано значение 0 (что означает EOF).
Если чтение получает N байтов, и этого недостаточно, тогда вам нужно выпустить еще один буфер таргетинга на чтение + N.
Пожалуйста, прочитайте прочитанного
Начиная с
Также, если я снова вызову read(), перезапишет ли он что-то в буфере? Под этим я подразумеваю пустой буфер и перезаписывать его новым вводом.
Ну, прочитанный перезапишет бафф, но не отправится в пустой буфер для вас, вы должны сделать это сами.
Функция read(int fd, void *buffer, size_t count)
будет считывать до count
байтов из файлового дескриптора fd
в buffer
, поэтому, если для чтения всего 10 bytes
оно будет читать только 10 bytes
. И нет, он не будет пустым buffer
и перезаписать его содержимое, он просто перезапишет байты, считанные из дескриптора файла.
0
(что означает отсутствие данных для чтения) или ошибку.