SysFn77/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
Данная системная функция реализует подсистему POSIX
=== Подфункция 0 - Создать фьютекс ===
=== Подфункция 0 - Создать фьютекс ===
''Параметры:''
''Параметры:''
Line 67: Line 68:


=== Подфункция 10 - read() ===
=== Подфункция 10 - read() ===
Чтение из файла в буфер.
''Параметры:''
''Параметры:''
:* eax = 77 - номер функции
:* eax = 77 - номер функции
Line 81: Line 83:


=== Подфункция 11 - write() ===
=== Подфункция 11 - write() ===
Запись данных из буфера в файл.
''Параметры:''
:* eax = 77 - номер функции
:* ebx = 11 - номер подфункции
:* ecx = дескриптор файла
:* edx = указатель на буфер, откуда брать данные для записи
:* esi = сколько байт записать
''Возвращаемое значение:''
:* eax = количество записанных байт
'''Константы для регистров:'''
:: eax - SF_FUTEX (77)
:: ebx - ...


=== Подфункция 12 - dup3() ===
=== Подфункция 12 - dup3() ===
:: Функция не реализована на данный момент.
=== Подфункция 13 - pipe2() ===
int pipe2(int pipefd[2], int flags);
Создает новый pipe. В 4 байта по адресу pipefd будет записан дескриптор для чтения из канала.


=== Подфункция 11 - pipe2() ===
В 4 байта по адресу pipefd + 4 будет записан дескриптор для записи в канал.
 
''Параметры:''
:* eax = 77 - номер функции
:* ebx = 13 - номер подфункции
:* ecx = адрес pipefd
:* edx = флаги. На данный момент если поднят O_CLOEXEC (0x40000), то сисфункция завершится с ошибкой. Поэтому в качестве флагов можно передать просто 0.
''Возвращаемое значение:''
:* eax = 0 если успех, иначе ошибка.
 
'''Константы для регистров:'''
:: eax - SF_FUTEX (77)
:: ebx - ...


{{System_functions}}
{{System_functions}}
[[Category: SysCalls]]
[[Category: SysCalls]]

Latest revision as of 22:17, 29 May 2021

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