SysFn77/ru

From KolibriOS wiki
Jump to: navigation, search

Данная системная функция реализует подсистему POSIX

Подфункция 0 - Создать фьютекс

Параметры:

  • eax = 77 - номер функции
  • ebx = 0 - номер подфункции
  • ecx = указатель на контрольное значение фьютекса (dword)

Возвращаемое значение:

  • eax = дескриптор фьютекса, 0 при ошибке

Константы для регистров:

eax - SF_FUTEX (77)
ebx - SSF_CREATE (0)

Подфункция 1 - Удалить фьютекс

Параметры:

  • eax = 77 - номер функции
  • ebx = 1 - номер подфункции
  • ecx = дескриптор фьютекса

Возвращаемое значение:

  • eax = 0 - успешно, -1 при ошибке

Замечания:

  • Ядро автоматически удаляет фьютексы при завершении процесса.

Константы для регистров:

eax - SF_FUTEX (77)
ebx - SSF_DESTROY (1)

Подфункция 2 - Ожидать

Параметры:

  • eax = 77 - номер функции
  • ebx = 2 - номер подфункции
  • ecx = дескриптор фьютекса
  • edx = контрольное значение
  • esi = таймаут в сотых секунды, 0 - ждать бесконечно

Возвращаемое значение:

  • eax = 0 - успешно, -1 - таймаут, -2 - контрольное значение не соответствует

Константы для регистров:

eax - SF_FUTEX (77)
ebx - SSF_WAIT (2)

Подфункция 3 - Разбудить

Параметры:

  • eax = 77 - номер функции
  • ebx = 3 - номер подфункции
  • ecx = дескриптор фьютекса
  • edx = сколько ожидающих будить (максимум)

Возвращаемое значение:

  • eax = количество разбуженых

Константы для регистров:

eax - SF_FUTEX (77)
ebx - SSF_WAKE (3)

Подфункция 4 - Зарезервирована

Подфункция 5 - Зарезервирована

Подфункция 6 - Зарезервирована

Подфункция 7 - Зарезервирована

Подфункция 8 - open()

Функция не реализована на данный момент.

Подфункция 9 - close()

Функция не реализована на данный момент.

Подфункция 10 - read()

Чтение из файла в буфер. Параметры:

  • eax = 77 - номер функции
  • ebx = 10 - номер подфункции
  • ecx = дескриптор файла
  • edx = указатель на буфер, куда читать
  • esi = сколько байт прочитать

Возвращаемое значение:

  • eax = количество прочитанных байт

Константы для регистров:

eax - SF_FUTEX (77)
ebx - ...

Подфункция 11 - write()

Запись данных из буфера в файл. Параметры:

  • eax = 77 - номер функции
  • ebx = 11 - номер подфункции
  • ecx = дескриптор файла
  • edx = указатель на буфер, откуда брать данные для записи
  • esi = сколько байт записать

Возвращаемое значение:

  • eax = количество записанных байт

Константы для регистров:

eax - SF_FUTEX (77)
ebx - ...

Подфункция 12 - dup3()

Функция не реализована на данный момент.

Подфункция 13 - pipe2()

int pipe2(int pipefd[2], int flags);

Создает новый pipe. В 4 байта по адресу pipefd будет записан дескриптор для чтения из канала.

В 4 байта по адресу pipefd + 4 будет записан дескриптор для записи в канал.

Параметры:

  • eax = 77 - номер функции
  • ebx = 13 - номер подфункции
  • ecx = адрес pipefd
  • edx = флаги. На данный момент если поднят O_CLOEXEC (0x40000), то сисфункция завершится с ошибкой. Поэтому в качестве флагов можно передать просто 0.

Возвращаемое значение:

  • eax = 0 если успех, иначе ошибка.

Константы для регистров:

eax - SF_FUTEX (77)
ebx - ...