IODataQueue
Универсальная очередь разработала для передачи данных от ядра до пользовательского процесса.
Класс IODataQueue разработан, чтобы позволить коду ядра ставить данные в очередь к пользовательскому процессу. Объекты IODataQueue разработаны, чтобы использоваться в единственном производителе / единственная потребительская ситуация. Также, существуют, не соединяет сами данные. Поскольку ядро ставит в очередь, и методы двухсторонней очереди пространства пользователя следуют за строгим набором инструкций, никакие блокировки не необходимы для поддержания целостности структуры данных.
Каждый ввод данных может быть переменный измеренный, но весь размер области данных очереди (включая издержки для каждой записи) должен быть указан передняя сторона.
Для экземпляра IODataQueue, чтобы уведомить пользовательский процесс, что данные доступны, уведомление, порт Маха должен быть установлен. Когда очередь пуста, и новая запись добавляется, сообщение отправляется в указанный порт.
Пользовательский клиентский код существует в платформе IOKit, упрощающей создание получить порта уведомлений, а также слушать процесс для новых уведомлений доступных данных.
Для предоставления доступа к памяти очереди данных доступной для пользовательского процесса, метод getMemoryDescriptor () должен использоваться для получения экземпляра IOMemoryDescriptor, который может быть отображен в пользовательский процесс. Как правило, clientMemoryForType () метод на экземпляре IOUserClient будет использоваться, чтобы запросить IOMemoryDescriptor и затем возвратить его, чтобы быть отображенным в пользовательский процесс.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Не применимый
Objective C
@import Kernel;
Доступность
Доступный в OS X v10.0 и позже.
Осуждаемый в OS X v10.10.
-
Ставит в очередь новую запись на очереди.
Объявление
C++
virtual Boolean enqueue( void *
data
, UInt32dataSize
);Параметры
data
Указатель на данные, которые будут добавлены к очереди.
dataSize
На размер данных указывают данные.
Возвращаемое значение
Возвращает true на успехе и ложь при отказе. Обычно отказ означает, что очередь полна.
Обсуждение
Этот метод добавляет новый ввод данных размера данных очереди. Это устанавливает параметр размера записи, на которую указывает значение хвоста, и копирует память, указал по условию на параметр на месте в очереди. Как только это сделано, это перемещает хвост в следующее доступное расположение. При попытке добавить новую запись к концу очереди и нет достаточного количества пространства в конце, это переносится назад к началу.
Если очередь пуста, когда новая запись добавляется, sendDataAvailableNotification () вызывается для отправки сообщения в пользовательский процесс, что данные теперь доступны.
-
Возвращает дескриптор памяти, покрывающий область IODataQueueMemory.
Объявление
C++
virtual IOMemoryDescriptor *getMemoryDescriptor();
Возвращаемое значение
Возвращает недавно выделенный IOMemoryDescriptor для области IODataQueueMemory. Возвраты обнуляют при отказе.
Обсуждение
Экземпляр IOMemoryDescriptor, возвращенный этим методом, предназначается, чтобы быть отображенным в пользовательский процесс. Это - область памяти, на которую воздействует код IODataQueueClient.
-
Инициализирует экземпляр IODataQueue со способностью, указанной в параметре размера.
Объявление
C++
virtual Boolean initWithCapacity( UInt32
size
);Параметры
size
Размер области памяти очереди данных.
Возвращаемое значение
Возвращает true на успехе и ложь при отказе.
Обсуждение
Фактический размер всей области памяти очереди данных (чтобы быть совместно использованным в пользовательский процесс) равен способности плюс IODataQueueMemory наверху. Это служебное значение может быть определено от макроса DATA_QUEUE_MEMORY_HEADER_SIZE в <IOKit/IODataQueueShared.h>. Размер области памяти очереди данных должен включать пространство для издержек каждого IODataQueueEntry. Эта запись наверху может быть определена от макроса DATA_QUEUE_ENTRY_HEADER_SIZE в <IOKit/IODataQueueShared.h>.
-
Инициализирует экземпляр IODataQueue с конкретным количеством записей данного размера.
Объявление
C++
virtual Boolean initWithEntries( UInt32
numEntries
, UInt32entrySize
);Параметры
numEntries
Число записей для выделения площади для.
entrySize
Размер каждой записи.
Возвращаемое значение
Истина Reeturns на успехе и ложь при отказе.
Обсуждение
Этот метод инициализирует экземпляр IODataQueue с достаточной способностью к numEntries entrySize. Это действительно составляет IODataQueueEntry наверху для каждой записи. Обратите внимание на то, что numEntries и entrySize просто используются для определения размера области данных. Они фактически не ограничивают размер числа записей, которые могут быть добавлены к очереди.
Этот метод выделяет новый экземпляр IODataQueue и затем вызывает initWithEntries () с данным numEntries и entrySize параметрами.
-
Отправляет сообщение dataAvailableNotification в указанный порт Маха.
Объявление
C++
virtual void sendDataAvailableNotification();
Обсуждение
Этот метод отправляет, сообщение к порту Маха передало setNotificationPort (). Это используется, чтобы указать, что данные доступны в очереди.
-
Создает простое сообщение Маха, предназначающееся для порта Маха, указанного в порту.
Объявление
C++
virtual void setNotificationPort( mach_port_t
port
);Параметры
port
Порт Маха для предназначения с уведомлением.
Обсуждение
Когда данные добавляются к пустой очереди, это сообщение отправляется. Это должно уведомить пользовательский процесс, что новые данные стали доступными.
-
Статический метод, создающий новый экземпляр IODataQueue со способностью, указанной в параметре размера.
Объявление
C++
static IODataQueue *withCapacity( UInt32
size
);Параметры
size
Размер области памяти очереди данных.
Возвращаемое значение
Возвращает недавно выделенный экземпляр IODataQueue. Нуль возвращается при отказе.
Обсуждение
Фактический размер всей области памяти очереди данных (чтобы быть совместно использованным в пользовательский процесс) равен способности плюс IODataQueueMemory наверху. Это служебное значение может быть определено от макроса DATA_QUEUE_MEMORY_HEADER_SIZE в <IOKit/IODataQueueShared.h>. Размер области памяти очереди данных должен включать пространство для издержек каждого IODataQueueEntry. Эта запись наверху может быть определена от макроса DATA_QUEUE_ENTRY_HEADER_SIZE в <IOKit/IODataQueueShared.h>.
Этот метод выделяет новый экземпляр IODataQueue и затем вызывает initWithCapacity () с данным параметром размера. Если initWithCapacity () сбои, новый экземпляр выпущен, и нуль возвращается.
-
Статический метод, создающий новый экземпляр IODataQueue с конкретным количеством записей данного размера.
Объявление
C++
static IODataQueue *withEntries( UInt32
numEntries
, UInt32entrySize
);Параметры
numEntries
Число записей для выделения площади для.
entrySize
Размер каждой записи.
Возвращаемое значение
Reeturns недавно выделенный экземпляр IODataQueue. Нуль возвращается при отказе.
Обсуждение
Этот метод создаст новый экземпляр IODataQueue с достаточной способностью к numEntries entrySize. Это действительно составляет IODataQueueEntry наверху для каждой записи. Обратите внимание на то, что numEntries и entrySize просто используются для определения размера области данных. Они фактически не ограничивают размер числа записей, которые могут быть добавлены к очереди.
Этот метод выделяет новый экземпляр IODataQueue и затем вызывает initWithEntries () с данным numEntries и entrySize параметрами. Если initWithEntries () сбои, новый экземпляр выпущен, и нуль возвращается.