⚡️ В Linux даже обычный syscall начинается с макроса.
Например:
SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count)
После препроцессора это превращается сразу в несколько функций:
- sys_write
- __se_sys_write
- __do_sys_write
Одна строка описывает системный вызов, а C-препроцессор через макросы и token pasting собирает остальную обвязку автоматически.
Именно поэтому код ядра Linux часто выглядит коротко, пока не начнёшь разворачивать макросы.
Например:
SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, size_t, count)
После препроцессора это превращается сразу в несколько функций:
- sys_write
- __se_sys_write
- __do_sys_write
Одна строка описывает системный вызов, а C-препроцессор через макросы и token pasting собирает остальную обвязку автоматически.
Именно поэтому код ядра Linux часто выглядит коротко, пока не начнёшь разворачивать макросы.