SysFn77/ru: Difference between revisions
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 будет записан дескриптор для чтения из канала. | |||
=== | В 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 - ...
|