Краткая справка |
Предыдущая Содержание Следующая |
Эта глава представляет следующие символы и заголовочные файлы:
#include <linux/ioctl.h> Объявляет все макросы, которые используются для определения команд ioctl. В настоящее время он подключается с помощью <linux/fs.h>. _IOC_NRBITS _IOC_TYPEBITS _IOC_SIZEBITS _IOC_DIRBITS Число бит, доступное для различных битовых полей команд ioctl. Есть также ещё четыре макроса, которые определяют MASKи и четыре, определяющие SHIFTы, но они в основном для внутреннего пользования. _IOC_SIZEBITS является важным значением для проверки, так как оно меняется в зависимости от архитектуры. _IOC_NONE _IOC_READ _IOC_WRITE Возможные значения битового поля "направление". "Чтение" и "Запись" являются разными битами и могут быть сложены командой OR (ИЛИ) для указания чтения/записи. Значения базируются на 0. _IOC(dir,type,nr,size) _IO(type,nr) _IOR(type,nr,size) _IOW(type,nr,size) _IOWR(type,nr,size) Макросы, используемые для создания команд ioctl. _IOC_DIR(nr) _IOC_TYPE(nr) _IOC_NR(nr) _IOC_SIZE(nr) Макросы, которые используются для декодирования команд. В частности, _IOC_TYPE(nr) является комбинацией по ИЛИ для _IOC_READ и _IOC_WRITE.
#include <asm/uaccess.h> int access_ok(int type, const void *addr, unsigned long size); Проверяет, что указатель в пользовательском пространстве является верным. access_ok возвращает ненулевое значение, если доступ будет разрешён. VERIFY_READ VERIFY_WRITE Возможные значения аргумента type в access_ok. VERIFY_WRITE является надстройкой VERIFY_READ.
#include <asm/uaccess.h> int put_user(datum,ptr); int get_user(local,ptr); int __put_user(datum,ptr); int __get_user(local,ptr); Макросы, которые используются для хранения и получения данных в или из пространства пользователя. Передаваемое количество байт зависит от sizeof(*ptr). Обычные версии сначала вызывают access_ok, в то время как специальные версии (__put_user и __get_user) предполагают, что access_ok уже вызывалась
#include <linux/capability.h> Определяет различные символы CAP_, описывающие какие возможности доступа может иметь процесс пользовательского пространства. int capable(int capability); Возвращает ненулевое значение, если этот процесс имеет данное разрешение.
#include <linux/wait.h> typedef struct { /* ... */ } wait_queue_head_t; void init_waitqueue_head(wait_queue_head_t *queue); DECLARE_WAIT_QUEUE_HEAD(queue); Определяет тип для очереди ожидания Linux. wait_queue_head_t должен быть явно проинициализирован либо init_waitqueue_head во время выполнения, либо DECLARE_WAIT_QUEUE_HEAD во время компиляции. void wait_event(wait_queue_head_t q, int condition); int wait_event_interruptible(wait_queue_head_t q, int condition); int wait_event_timeout(wait_queue_head_t q, int condition, int time); int wait_event_interruptible_timeout(wait_queue_head_t q, int condition, int time); Помещает процесс в сон в данной очереди, пока данное condition (условие) оценивается как истинное значение. void wake_up(struct wait_queue *q); void wake_up_interruptible(struct wait_queue *q); void wake_up_nr(struct wait_queue *q, int nr); void wake_up_interruptible_nr(struct wait_queue *q, int nr); void wake_up_all(struct wait_queue *q); void wake_up_interruptible_all(struct wait_queue *q); void wake_up_interruptible_sync(struct wait_queue *q); Пробуждает процессы, которые являются спящими в очереди q. Форма _interruptible пробуждает только прерываемые процессы. Как правило, пробуждается только один ожидающий эксклюзивно, но это поведение можно изменить с помощью форм _nr или _all. Версия _sync не переключает процессор перед возвратом.
#include <linux/sched.h> set_current_state(int state); Устанавливает состояние выполнения для текущего процесса. TASK_RUNNING означает, что он готов к запуску, а состояниями сна являются TASK_INTERRUPTIBLE и TASK_UNINTERRUPTIBLE. void schedule(void); Выбирает работающий процесс из очереди выполнения. Выбранный процесс может быть current (текущим) или любым другим. typedef struct { /* ... */ } wait_queue_t; init_waitqueue_entry(wait_queue_t *entry, struct task_struct *task); Тип wait_queue_t используется для помещения процесса в очередь ожидания. void prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state); void prepare_to_wait_exclusive(wait_queue_head_t *queue, wait_queue_t *wait, int state); void finish_wait(wait_queue_head_t *queue, wait_queue_t *wait); Вспомогательные функции, которые могут быть использованы в коде для ручного управления сном. void sleep_on(wiat_queue_head_t *queue); void interruptible_sleep_on(wiat_queue_head_t *queue); Устаревшие и осуждаемые для использования функции, которые безоговорочно помещают текущий процесс в сон.
#include <linux/poll.h> void poll_wait(struct file *filp, wait_queue_head_t *q, poll_table *p) Помещает текущий процесс в очередь ожидания сразу, без планировщика. Предназначена для использования методом poll драйверами устройств. int fasync_helper(struct inode *inode, struct file *filp, int mode, struct fasync_struct **fa); "Помощник" для реализации метода устройства fasync. Аргумент mode является тем же значением, которое передаётся в метод, а fa указывает на зависимую от устройства fasync_struct *. void kill_fasync(struct fasync_struct *fa, int sig, int band); Если драйвер поддерживает асинхронное уведомление, эта функция может быть использована для отправки сигнала процессам, зарегистрированным в fa. int nonseekable_open(struct inode *inode, struct file *filp); loff_t no_llseek(struct file *file, loff_t offset, int whence); nonseekable_open должна быть вызвана в методе open любого устройства, которое не поддерживает произвольный доступ. Такие устройства должны также использовать no_llseek как свой метод llseek.
|
Предыдущая Содержание Следующая |