3.5. Функции управления байтами

3.5. Функции управления байтами

Существует две группы функций, работающих с многобайтовыми полями без преобразования данных и без интерпретации их в качестве строк языка С с завершающим нулем. Они необходимы нам при обработке структур адресов сокетов, поскольку такие поля этих структур, как IP-адреса, могут содержать нулевые байты, но при этом не являются строками С. Строки с завершающим нулем обрабатываются функциями языка С, имена которых начинаются с аббревиатуры str. Эти функции подключаются с помощью файла <string.h>.

Первая группа функций, названия которых начинаются с b (от слова «byte» — «байт»), взяты из реализации 4.2BSD и все еще предоставляются практически любой системой, поддерживающей функции сокетов. Вторая группа функций, названия которых начинаются с mem (от слова «memory» — память), взяты из стандарта ANSI С и доступны в любой системе, обеспечивающей поддержку библиотеки ANSI С.

Сначала мы представим функции, которые берут начало от реализации Беркли, хотя в книге мы будем использовать только одну из них — bzero. (Дело в том, что она имеет только два аргумента и ее проще запомнить, чем функцию memset с тремя аргументами, как объяснялось в разделе 1.2.) Две другие функции, bcopy и bcmp, могут встретиться вам в существующих приложениях.

#include <strings.h>

void bzero(void *dest, size_t nbytes);

void bcopy(const void *src, void *dest, size_t nbytes);

int bcmp(const void *ptr1, const void *ptr2, size_t nbytes);

Возвращает: 0 в случае равенства, ненулевое значение в случае неравенства

ПРИМЕЧАНИЕ

Мы впервые встречаемся со спецификатором const. В приведенном примере он служит признаком того, что значения, на которые указывает указатель, то есть src, ptr1 и ptr2, не изменяются функцией. Другими словами, область памяти, на которую указывает указатель со спецификатором const, считывается функцией, но не изменяется.

Функция bzero обнуляет заданное число байтов в указанной области памяти. Мы часто используем эту функцию для инициализации структуры адреса сокета нулевым значением. Функция bcopy копирует заданное число байтов из источника в место назначения. Функция bcmp сравнивает две произвольных последовательности байтов и возвращает нулевое значение, если две байтовых строки идентичны, и ненулевое — в противном случае.

Следующие функции являются функциями ANSI С:

#include <string.h>

void *memset(void *dest, int c, size_t len);

void *memcpy(void *dest, const void *src, size_t nbytes);

int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);

Возвращает: 0 в случае равенства, значение <0 или >0 в случае неравенства (см. текст)

Функция memset присваивает заданному числу байтов значение с. Функция memcpy аналогична функции bcopy, но имеет другой порядок двух аргументов. Функция bcopy корректно обрабатывает перекрывающиеся поля, в то время как поведение функции memcpy не определено, если источник и место назначения перекрываются. В случае перекрывания полей должна использоваться функция ANSI С memmove (упражнение 30.3).

ПРИМЕЧАНИЕ

Чтобы запомнить порядок аргументов функции memcpy, подумайте о том, что он совпадает с порядком аргументов в операторе присваивания (справа — оригинал, слева — копия).

dest = src;

Последним аргументом этой функции (как и всех ANSI-функций memXXX) всегда является длина области памяти.

Функция memcmp сравнивает две произвольных последовательности байтов и возвращает нуль, если они идентичны. В противном случае знак возвращаемого значения определяется знаком разности между первыми несовпадающими байтами, на которые указывают ptr1 и ptr2. Предполагается, что сравниваемые байты принадлежат к типу unsigned char.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Элементы управления

Из книги Работа на ноутбуке автора Садовский Алексей

Элементы управления Элементы управления бывают нескольких видов. Часто используемые и простые для восприятия – кнопки (рис. 8.10). Рис. 8.10. КнопкиОни бывают разных размеров, форм и цветов. На них могут быть нанесены как текст, так и изображение, а иногда и текст, и


3. Панель управления

Из книги Как перейти на Windows Vista. Начали! автора Бардиян Дмитрий Владимирович

3. Панель управления Операционная система Windows Vista будет поставляться с 19 000 драйверов на установочном диске. Еще 11 000 драйверов для различных устройств можно будет скачать с помощью системы обновлений Windows Update.Централизованный доступ к настройкам операционной системы


8.1. Панель управления нужна для управления

Из книги Windows Vista без напряга автора Жвалевский Андрей Валентинович

8.1. Панель управления нужна для управления В любом сложном устройстве всегда есть пульт – набор кнопок, рычажков, сенсорных датчиков, штурвалов… словом, приспособлений, с помощью которых можно этим сложным устройством управлять.Есть такой «пульт» и в Vista. Он называется


Панель управления

Из книги Реестр Windows автора Климов А

Панель управления Установка и удаление программ (Windows NT/2000/XP) Чтобы пользователь не мог воспользоваться апплетом Панели управления Установка и удаление программ, создайте в разделе HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesUninstall ключ NoAddRemovePrograms типа DWORD и установите его равным


Панель управления

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Панель управления Хотя в списке палитр мы приводили палитру Tools (Инструменты), под определение «палитры» она не подходит, поскольку не является в полном смысле слова «плавающей»: ее размер нельзя изменить и состыковать с другими палитрами. Поэтому чаще ее называют


HTML-элементы управления и серверные элементы управления

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

HTML-элементы управления и серверные элементы управления Еще одной новинкой технологии ASP.NET является использование серверных элементов управления. Серверный элемент управления кодируется в Web-странице, а все его события и свойства обрабатываются Web-сервером. Серверные


Дополнительные функции управления потоками

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Дополнительные функции управления потоками Несмотря на то что функций управления потоками, которые мы выше обсуждали, вполне достаточно для большинства случаев, в том числе и для примеров, приведенных в этой книге, в Windows XP и Windows Server 2003 были введены две дополнительные


4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации

Из книги MySQL: руководство профессионала автора Паутов Алексей В

4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из


Функции управления выводом

Из книги Справочник по PHP автора

Функции управления выводом ob_startВключение буферизации вывода.Синтаксис:void ob_start([string output_callback])После вызова этой функции включается буферизация вывода и, пока она активна, никакие из выводящихся данных не будут посланы браузеру, а будут сохраняться во внутреннем буфере


Простейшие функции управления "связками ключей".

Из книги ПК без напряга автора Жвалевский Андрей Валентинович

Простейшие функции управления "связками ключей". Кроме того, PGP 2 реализует простейшие функции управления "связками ключей", включая добавление и удаление ключа со связки, возможность гибкой настройки параметров, а также встроенные функции сжатия исходного открытого


Панель управления нужна для управления

Из книги Реестр Windows 7 автора Климов Александр Петрович

Панель управления нужна для управления В любом сложном устройстве всегда есть пульт – набор кнопок, рычажков, сенсорных датчиков, штурвалов… словом, приспособлений, с помощью которых можно этим сложным устройством управлять.Есть такой «пульт» и в Vista. Он называется


Панель управления

Из книги Linux программирование в примерах автора Роббинс Арнольд

Панель управления Панель управления (рис. 2.18) является одним из важнейших компонентов операционной системы. Рис. 2.18. Панель управленияЧерез программы Панели управления настраиваются различные параметры работы с системой, устройствами, Интернетом и др. Рассмотрим


14.4.2. Функции управления деревьями

Из книги автора

14.4.2. Функции управления деревьями Только что описанные операции соответствуют следующим функциям:#include <search.h> /* XSI */void *tsearch(const void *key, void **rootp,int (*compare)(const void*, const void*));void *tfind(const void *key, const void **rootp,int (*compare)(const void*, const void*));void *tdelete(const void *key, void **rootp,int (*compare)(const void*, const void*));typedef enum {