Ограничения поддержки POSIX

В KasperskyOS ограниченно реализован интерфейс POSIX с ориентацией на стандарт POSIX.1-2008 (без поддержки XSI). Прежде всего ограничения связаны с обеспечением безопасности.

Ограничения затрагивают:

Ограничения представлены:

В KasperskyOS сигналы не могут прервать системные вызовы Call(), Recv(), Reply(), которые обеспечивают работу библиотек, реализующих интерфейс POSIX.

Ядро KasperskyOS не посылает сигналы.

Ограничения взаимодействия между процессами

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

fork()

Создать новый (дочерний) процесс.

Заглушка

unistd.h

pthread_

atfork()

Зарегистрировать обработчики, которые вызываются перед и после создания дочернего процесса.

Не реализован

pthread.h

wait()

Ожидать остановки или завершения дочернего процесса.

Заглушка

sys/wait.h

waitid()

Ожидать изменения состояния дочернего процесса.

Не реализован

sys/wait.h

waitpid()

Ожидать остановки или завершения дочернего процесса.

Заглушка

sys/wait.h

execl()

Запустить исполняемый файл.

Заглушка

unistd.h

execle()

Запустить исполняемый файл.

Заглушка

unistd.h

execlp()

Запустить исполняемый файл.

Заглушка

unistd.h

execv()

Запустить исполняемый файл.

Заглушка

unistd.h

execve()

Запустить исполняемый файл.

Заглушка

unistd.h

execvp()

Запустить исполняемый файл.

Заглушка

unistd.h

fexecve()

Запустить исполняемый файл.

Заглушка

unistd.h

setpgid()

Перевести процесс в другую группу или создать группу.

Заглушка

unistd.h

setsid()

Создать сессию.

Не реализован

unistd.h

getpgrp()

Получить идентификатор группы для вызывающего процесса.

Не реализован

unistd.h

getpgid()

Получить идентификатор группы.

Заглушка

unistd.h

getppid()

Получить идентификатор родительского процесса.

Не реализован

unistd.h

getsid()

Получить идентификатор сессии.

Заглушка

unistd.h

times()

Получить значения времени для процесса и его потомков.

Заглушка

sys/times.h

kill()

Послать сигнал процессу или группе процессов.

Можно посылать только сигнал SIGTERM. Параметр pid игнорируется.

signal.h

pause()

Ожидать сигнала.

Не реализован

unistd.h

sigpending()

Проверить наличие полученных заблокированных сигналов.

Не реализован

signal.h

sigprocmask()

Получить и изменить набор заблокированных сигналов.

Заглушка

signal.h

sigsuspend()

Ожидать сигнала.

Заглушка

signal.h

sigwait()

Ожидать сигнала из заданного набора сигналов.

Заглушка

signal.h

sigqueue()

Послать сигнал процессу.

Не реализован

signal.h

sigtimedwait()

Ожидать сигнала из заданного набора сигналов.

Не реализован

signal.h

sigwaitinfo()

Ожидать сигнала из заданного набора сигналов.

Не реализован

signal.h

sem_init()

Создать неименованный семафор.

Нельзя создать неименованный семафор для синхронизации между процессами. Если передать функции ненулевое значение через параметр pshared, то она только вернет значение -1 и присвоит переменной errno значение ENOTSUP.

semaphore.h

sem_open()

Создать/открыть именованный семафор.

Нельзя открыть именованный семафор, который был создан другим процессом. Именованные семафоры (как и неименованные) являются локальными, то есть они доступны только тому процессу, который их создал.

semaphore.h

pthread_

mutexattr_

setpshared()

Задать атрибут мьютекса, который разрешает использование мьютекса несколькими процессами.

Нельзя задать атрибут мьютекса, который разрешает использование мьютекса несколькими процессами. Если передать функции значение PTHREAD_PROCESS_SHARED через параметр pshared, то она только вернет значение ENOSYS.

pthread.h

pthread_

barrierattr_

setpshared()

Задать атрибут барьера, который разрешает использование барьера несколькими процессами.

Нельзя задать атрибут барьера, который разрешает использование барьера несколькими процессами. Если передать функции значение PTHREAD_PROCESS_SHARED через параметр pshared, то она только вернет значение ENOSYS.

pthread.h

pthread_

condattr_

setpshared()

Задать атрибут условной переменной, который разрешает использование условной переменной несколькими процессами.

Нельзя задать атрибут условной переменной, который разрешает использование условной переменной несколькими процессами. Если передать функции значение PTHREAD_PROCESS_SHARED через параметр pshared, то она только вернет значение ENOSYS.

pthread.h

pthread_

rwlockattr_

setpshared()

Задать атрибут объекта блокировки чтения-записи, который разрешает использование объекта блокировки чтения-записи несколькими процессами.

Нельзя задать атрибут объекта блокировки чтения-записи, который разрешает использование объекта блокировки чтения-записи несколькими процессами. Если передать функции значение PTHREAD_PROCESS_SHARED через параметр pshared, то она только вернет значение ENOSYS.

pthread.h

pthread_

spin_init()

Создать спин-блокировку.

Нельзя создать спин-блокировку для синхронизации между процессами. Если передать функции значение PTHREAD_PROCESS_SHARED через параметр pshared, то это значение будет проигнорировано.

pthread.h

shm_open()

Создать или открыть объект разделяемой памяти.

Не реализован

sys/mman.h

mmap()

Отобразить в память.

Нельзя выполнить отображение в память для взаимодействия между процессами. Если передать функции значения MAP_SHARED и PROT_WRITE через параметры flags и prot соответственно, то функция вернет значение MAP_FAILED и присвоит переменной errno значение EACCES. Для остальных возможных значений параметра prot значение MAP_SHARED параметра flags будет проигнорировано. Кроме того, через параметр prot нельзя передавать сочетания флагов PROT_WRITE|PROT_EXEC и PROT_READ|PROT_WRITE|PROT_EXEC. В этом случае функция только возвращает значение MAP_FAILED и присваивает переменной errno значение ENOMEM.

sys/mman.h

mprotect()

Задать права доступа к памяти.

По умолчанию функция работает как заглушка. Чтобы использовать функцию, требуется задать специальные параметры ядра KasperskyOS.

sys/mman.h

pipe()

Создать неименованный канал.

Нельзя использовать неименованный канал для передачи данных между процессами. Неименованные каналы являются локальными, то есть они доступны только тому процессу, который их создал.

unistd.h

mkfifo()

Создать специальный файл FIFO (именованный канал).

Заглушка

sys/stat.h

mkfifoat()

Создать специальный файл FIFO (именованный канал).

Не реализован

sys/stat.h

Ограничения взаимодействия между потоками исполнения посредством сигналов

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

pthread_kill()

Послать сигнал потоку исполнения.

Нельзя послать сигнал потоку исполнения. Если передать функции номер сигнала через параметр sig, то она только вернет значение ENOSYS.

signal.h

pthread_sigmask()

Получить и изменить набор заблокированных сигналов.

Заглушка

signal.h

siglongjmp()

Восстановить состояние потока управления и маску сигналов.

Не реализован

setjmp.h

sigsetjmp()

Сохранить состояние потока управления и маску сигналов.

Не реализован

setjmp.h

Ограничения стандартного ввода-вывода

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

dprintf()

Выполнить форматированный вывод в файл.

Не реализован

stdio.h

fmemopen()

Использовать память как поток данных (stream).

Не реализован

stdio.h

open_memstream()

Использовать динамически выделенную память как поток данных (stream).

Не реализован

stdio.h

vdprintf()

Выполнить форматированный вывод в файл.

Не реализован

stdio.h

Ограничения асинхронного ввода-вывода

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

aio_cancel()

Отменить запросы ввода-вывода, которые ожидают обработки.

Не реализован

aio.h

aio_error()

Получить ошибку операции асинхронного ввода-вывода.

Не реализован

aio.h

aio_fsync()

Запросить выполнение операций ввода-вывода.

Не реализован

aio.h

aio_read()

Запросить чтение из файла.

Не реализован

aio.h

aio_return()

Получить статус операции асинхронного ввода-вывода.

Не реализован

aio.h

aio_suspend()

Ожидать выполнения операций асинхронного ввода-вывода.

Не реализован

aio.h

aio_write()

Запросить запись в файл.

Не реализован

aio.h

lio_listio()

Запросить выполнение набора операций ввода-вывода.

Не реализован

aio.h

Ограничения использования робастных мьютексов

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

pthread_mutex_consistent()

Вернуть робастный мьютекс в консистентное состояние.

Не реализован

pthread.h

pthread_mutexattr_getrobust()

Получить атрибут робастности мьютекса.

Не реализован

pthread.h

pthread_mutexattr_setrobust()

Задать атрибут робастности мьютекса.

Не реализован

pthread.h

Ограничения работы с терминалом

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

ctermid()

Получить путь к файлу управляющего терминала.

Функция только возвращает или передает через параметр s пустую строку.

stdio.h

tcsetattr()

Задать параметры терминала.

Скорость ввода, скорость вывода и другие параметры, специфичные для аппаратных терминалов, игнорируются.

termios.h

tcdrain()

Ожидать завершения вывода.

Функция только возвращает значение -1.

termios.h

tcflow()

Приостановить или возобновить прием или передачу данных.

Приостановка вывода и запуск приостановленного вывода не поддерживаются.

termios.h

tcflush()

Очистить очередь ввода или очередь вывода, или обе эти очереди.

Функция только возвращает значение -1.

termios.h

tcsendbreak()

Разорвать соединение с терминалом на заданное время.

Функция только возвращает значение -1.

termios.h

ttyname()

Получить путь к файлу терминала.

Функция только возвращает нулевой указатель.

unistd.h

ttyname_r()

Получить путь к файлу терминала.

Функция только возвращает значение ошибки.

unistd.h

tcgetpgrp()

Получить идентификатор группы процессов, использующих терминал.

Функция только возвращает значение -1.

unistd.h

tcsetpgrp()

Задать идентификатор группы процессов, использующих терминал.

Функция только возвращает значение -1.

unistd.h

tcgetsid()

Получить идентификатор группы процессов для лидера сессии, связанной с терминалом.

Функция только возвращает значение -1.

termios.h

Ограничения работы с оболочкой

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

popen()

Создать дочерний процесс для выполнения команды и канал с этим процессом.

Функция только присваивает переменной errno значение ENOSYS и возвращает значение NULL.

stdio.h

pclose()

Закрыть канал с дочерним процессом, созданным функцией popen(), и ожидать завершения этого дочернего процесса.

Функцию нельзя использовать, так как ее входным параметром является дескриптор потока данных, возвращаемый функцией popen(), которая не может вернуть ничего, кроме значения NULL.

stdio.h

system()

Создать дочерний процесс для выполнения команды.

Заглушка

stdlib.h

wordexp()

Раскрыть строку как в оболочке.

Не реализован

wordexp.h

wordfree()

Освободить память, выделенную для результатов вызова интерфейса wordexp().

Не реализован

wordexp.h

Ограничения манипуляций с дескрипторами файлов

Интерфейс

Назначение

Реализация

Заголовочный файл по стандарту POSIX.1-2008

dup()

Сделать копию дескриптора открытого файла.

Поддерживаются дескрипторы обычных файлов, стандартных потоков ввода-вывода, сокетов и каналов. Не гарантируется, что будет получен наименьший свободный дескриптор.

fcntl.h

dup2()

Сделать копию дескриптора открытого файла.

Поддерживаются дескрипторы обычных файлов, стандартных потоков ввода-вывода, сокетов и каналов. Через параметр fildes2 нужно передавать дескриптор открытого файла.

fcntl.h

В начало