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.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
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 {
Дополнительные функции управления потоками
Дополнительные функции управления потоками Несмотря на то что функций управления потоками, которые мы выше обсуждали, вполне достаточно для большинства случаев, в том числе и для примеров, приведенных в этой книге, в Windows XP и Windows Server 2003 были введены две дополнительные
Функции управления выводом
Функции управления выводом ob_startВключение буферизации вывода.Синтаксис:void ob_start([string output_callback])После вызова этой функции включается буферизация вывода и, пока она активна, никакие из выводящихся данных не будут посланы браузеру, а будут сохраняться во внутреннем буфере
Панель управления
Панель управления Панель управления (рис. 2.18) является одним из важнейших компонентов операционной системы. Рис. 2.18. Панель управленияЧерез программы Панели управления настраиваются различные параметры работы с системой, устройствами, Интернетом и др. Рассмотрим
Панель управления
Панель управления Установка и удаление программ (Windows NT/2000/XP) Чтобы пользователь не мог воспользоваться апплетом Панели управления Установка и удаление программ, создайте в разделе HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesUninstall ключ NoAddRemovePrograms типа DWORD и установите его равным
3. Панель управления
3. Панель управления Операционная система Windows Vista будет поставляться с 19 000 драйверов на установочном диске. Еще 11 000 драйверов для различных устройств можно будет скачать с помощью системы обновлений Windows Update.Централизованный доступ к настройкам операционной системы
8.1. Панель управления нужна для управления
8.1. Панель управления нужна для управления В любом сложном устройстве всегда есть пульт – набор кнопок, рычажков, сенсорных датчиков, штурвалов… словом, приспособлений, с помощью которых можно этим сложным устройством управлять.Есть такой «пульт» и в Vista. Он называется
HTML-элементы управления и серверные элементы управления
HTML-элементы управления и серверные элементы управления Еще одной новинкой технологии ASP.NET является использование серверных элементов управления. Серверный элемент управления кодируется в Web-странице, а все его события и свойства обрабатываются Web-сервером. Серверные
Панель управления
Панель управления Хотя в списке палитр мы приводили палитру Tools (Инструменты), под определение «палитры» она не подходит, поскольку не является в полном смысле слова «плавающей»: ее размер нельзя изменить и состыковать с другими палитрами. Поэтому чаще ее называют
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из
Простейшие функции управления "связками ключей".
Простейшие функции управления "связками ключей". Кроме того, PGP 2 реализует простейшие функции управления "связками ключей", включая добавление и удаление ключа со связки, возможность гибкой настройки параметров, а также встроенные функции сжатия исходного открытого
Панель управления нужна для управления
Панель управления нужна для управления В любом сложном устройстве всегда есть пульт – набор кнопок, рычажков, сенсорных датчиков, штурвалов… словом, приспособлений, с помощью которых можно этим сложным устройством управлять.Есть такой «пульт» и в Vista. Он называется
Элементы управления
Элементы управления Элементы управления бывают нескольких видов. Часто используемые и простые для восприятия – кнопки (рис. 8.10). Рис. 8.10. КнопкиОни бывают разных размеров, форм и цветов. На них могут быть нанесены как текст, так и изображение, а иногда и текст, и