SYSM68K(2)

НАЗВАНИЕ
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   /* Удалить одну из текущих областей

                                подкачки. */

Описания, необходимые для использования данной разновидности системного вызова sysm68k, содержатся во включаемом файле <sys/swap.h>.

Добавление и удаление областей подкачки доступно только суперпользователям.

Операции с областями подкачки обычно выполняются следующим образом:


             #include <sys/trap.h>

             #include <sys/swap.h>

             

             /* Описание структуры для выполнения запросов */

             struct swapint swapbuf;

             

             /* Заполнение структуры */

              ...

             

             /* Собственно системный вызов */

             sysm68k (S3BSWPI, &swapbuf);

Системный вызов sysm68k при значении аргумента cmd, равном S3BSWPI, завершается неудачей, и операции с областями подкачки не выполняются, если выполнено хотя бы одно из следующих условий:

[EFAULT]
Дополнительный аргумент указывает за пределы отведенного процессу адресного пространства.
[EFAULT]
Поле si_buf указывает за пределы отведенного процессу адресного пространства.
[ENOTBLK]
Заданная область подкачки не является специальным блочным файлом.
[EEXIST]
Заданная область подкачки уже существует.
[ENOSPC]
Добавить область подкачки нельзя, так как их количество уже максимально.
[ENOMEM]
Попытка удалить последнюю область подкачки.
[EINVAL]
Неправильные аргументы.
[ENOMEM]
Если удалить область подкачки, то не хватит места для подкачиваемых страниц.

Команда STIME
Если значение cmd равно STIME, то устанавливаются системные дата и время. Единственный дополнительный аргумент типа long должен содержать время, прошедшее с нуля часов 1 января 1970 года (по Гринвичу), измеренное в секундах. Эту команду может выполнить только суперпользователь.

СМ. ТАКЖЕ
date(1) в Справочнике пользователя. swap(1M) в Справочнике администратора.

ДИАГНОСТИКА
Для описанных вариантов системного вызова sysm68k при успешном завершении результат равен 0; в противном случае возвращается -1, а переменной errno присваивается код ошибки.