SysFn77/ru

From KolibriOS wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Данная системная функция реализует подсистему 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 - ...