SYSM68K(2) SYSM68K(2) НАЗВАНИЕ sysm68k - машинно-зависимые функции СИНТАКСИС |#include | |int sysm68k (cmd, arg1, arg2, arg3) |int cmd, arg1, arg2, arg3; ОПИСАНИЕ Системный вызов sysm68k реализует машинно-зависимые действия. Конкретный характер действий определяется аргументом cmd. Количество и смысл остальных аргумен- тов, в свою очередь, зависят от выполняемого действия. Ниже кратко описаны три из возможных действий. Дополни- тельные сведения можно получить из включаемых файлов , и . Команда S3BFPHW Если значение cmd равно S3BFPHW, то проверяется, су- ществует ли сопроцессор, поддерживающий арифметику ве- щественных чисел. Требуется один дополнительный аргу- мент - адрес целочисленной переменной. Если сопроцессор существует, то в результате выполнения системного вызо- ва этой переменной присваивается 1, а если не существу- ет, то 0. Чтобы проверить наличие сопроцессора, необходимо сде- лать следующее: |#include | |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, содержатся во вклю- чаемом файле . Добавление и удаление областей подкачки доступно только суперпользователям. Операции с областями подкачки обычно выполняются следу- ющим образом: |#include |#include | |/* Описание структуры для выполнения запросов */ |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 присваивается код ошибки.