SysFn77/ru: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
Данная системная функция реализует подсистему POSIX | |||
=== Подфункция 0 - Создать фьютекс === | === Подфункция 0 - Создать фьютекс === | ||
''Параметры:'' | ''Параметры:'' |
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 - ...
|