Какая процедура при вызове fork (), тогда она становится вызывающей sys_fork ()?

Попробуйте Underscore.string lib, он работает с jQuery.

_.str.escapeHTML('
Blah blah blah
')

output:

'<div>Blah blah blah</div>'

0
задан Mark 18 January 2019 в 03:29
поделиться

1 ответ

То, что вы ищете , не в ядре. это находится в библиотеке C. К сожалению, историческая библиотека C не является частью linux-0.11.tar.gz, поэтому мы можем только предполагать, как она написана.

Библиотека C использует этот макрос из <unistd.h>:

#define _syscall0(type,name) \
type name(void) \
{ \
long __res; \
__asm__ volatile ("int [110]x80" \
        : "=a" (__res) \
        : "0" (__NR_##name)); \
if (__res >= 0) \
        return (type) __res; \
errno = -__res; \
return -1; \
}

с аргументами int, fork (да, похоже, он не использует pid_t в качестве возвращаемого значения, даже если этот тип существует) , который расширится до

int fork(void) { 
    long __res; 
    __asm__ volatile ("int [111]x80" : 
                      "=a" (__res) : 
                      "0" (__NR_fork)); 
    if (__res >= 0) 
        return (int) __res; e
    errno = -__res; 
    return -1;
}

Это определение функции скомпилировано в одной единице перевода библиотеки C. Кроме того, файл unistd.h ядра является тем, который доступен для пользовательского пространства.

Встроенный ассемблер просто помещает значение __NR_fork в eax, вызывает прерывание 0x80 и получает возвращаемое значение __res из eax.

Прерывание 0x80 поступает в _system_call из system_call.s, который имеет следующий код:

.align 2
_system_call:
        cmpl $nr_system_calls-1,%eax
        ja bad_sys_call
        [...]
        call _sys_call_table(,%eax,4)
        [...]
        iret

, т.е. eax сначала сравнивают с максимальным номером системного вызова, и, если указано выше, возникает ошибка; затем eax 4-байтовый указатель вызывается из таблицы системных вызовов, и, наконец, iret возвращается из прерывания, возвращаемое значение вызываемой функции сохраняется в eax.

0
ответ дан Antti Haapala 18 January 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: