НАЗВАНИЕ
sysm68k - машинно-зависимые функции
СИНТАКСИС
#include <sys/trap.h>
int sysm68k (cmd, arg1, arg2, arg3) int cmd, arg1, arg2, arg3;
ОПИСАНИЕ
Системный вызов sysm68k реализует машинно-зависимые действия. Конкретный характер действий определяется аргументом cmd. Количество и смысл остальных аргументов, в свою очередь, зависят от выполняемого действия. Ниже кратко описаны три из возможных действий. Дополнительные сведения можно получить из включаемых файлов <sys/trap.h>, <sys/swap.h> и <sys/conf.h>.
Команда S3BFPHW
Если значение cmd равно S3BFPHW, то проверяется, существует ли сопроцессор, поддерживающий арифметику вещественных чисел. Требуется один дополнительный аргумент - адрес целочисленной переменной. Если сопроцессор существует, то в результате выполнения системного вызова этой переменной присваивается 1, а если не существует, то 0.
Чтобы проверить наличие сопроцессора, необходимо сделать следующее:
#include <sys/trap.h>
int fpu_present; sysm68k (S3BFPHW, &fpu_present);
Системный вызов sysm68k при значении аргумента cmd, равном S3BFPHW, завершается неудачей, и наличие сопроцессора не определяется, если выполнено хотя бы одно из следующих условий:
[EFAULT] Дополнительный аргумент не является корректным адресом целочисленной переменной (например, он оказался нечетным). [EFAULT] Дополнительный аргумент указывает за пределы отведенного процессу адресного пространства.
Команда S3BSWPI
Если значение cmd равно S3BSWPI, то может быть добавлена или удалена отдельная область подкачки. Можно также получить текущую информацию обо всех областях подкачки. В качестве дополнительного аргумента указывается адрес структуры типа swapint:
struct swapint { char si_cmd; /* Код команды (см. ниже). */ char *si_buf; /* В случае информационного запроса [код SI_LIST] это поле должно указывать на буфер размером не менее sizeof (swpt_t) * MSFILES байт. В остальных запросах это указатель на маршрутное имя файла-устройства, на котором находится или создается область подкачки. */ int si_swplo; /* Номер первого блока области подкачки. Используется только для добавления и удаления областей подкачки. */ int si_nblks; /* Размер области подкачки в блоках. Используется только в запросе добавления области подкачки. */ } /* Возможные значения si_cmd (коды команд) */ #define SI_LIST 0 /* Получить список текущих областей подкачки. */ #define SI_ADD 1 /* Добавить область подкачки. */ #define SI_DEL 2 /* Удалить одну из текущих областей подкачки. */