LINUX.ORG.RU

История изменений

Исправление mittorn, (текущая версия) :

Можно. Про .so не уверен, можешь попробовать. Сделать статическую библиотеку (.a) - то же самое, что дописать в код.
И вообще используй syscall для такой функции, это стабильнее.
Там вся функция - вызов syscall.

Не забудь прочитать man 2 syscall:

   Требования, зависящие от архитектуры
       Каждый  ABI  архитектуры  имеет свои собственные требования по передаче
       аргументов системного вызова в ядро.  Для  системных  вызовов,  имеющих
       обёртку в glibc (большинство системных вызовов), копирование аргументов
       в правильные регистры с учётом архитектуры выполняется в  самой  glibc.
       Однако при выполнении системного вызова через syscall(), вызывающий сам
       должен учитывать особенности архитектуры; чаще всего  это  относится  к
       32-битным архитектурам.

       Например,  на  архитектуре  ARM  Embedded ABI (EABI) 64-битное значение
       (long long) должно быть выровнено по чётной паре  регистров.  То  есть,
       при  использовании  syscall() вместо обёрточной функции glibc системный
       вызов readahead() на ARM вызывался бы с учётом EABI следующим образом:

           syscall(SYS_readahead, fd, 0,
                   (unsigned int) (offset >> 32),
                   (unsigned int) (offset & 0xFFFFFFFF),
                   count);

       Так как смещение аргумента 64 бита, и первый аргумент (fd) передаётся в
       регистре r0, вызывающий должен разделить и выровнять 64-битное значение
       так, чтобы оно передавалось в паре  регистров  r2/r3.  Это  выполняется
       вставкой пустого значения в r1 (второго аргумент 0).

       Подобные  сложности  можно  видеть  на  MIPS  с  O32  ABI, на PowerPC с
       32-битным ABI и на Xtensa.

       Это относится  к  системным  вызовам  fadvise64_64(2),  ftruncate64(2),
       posix_fadvise(2),      pread64(2),      pwrite64(2),      readahead(2),
       sync_file_range(2) и truncate64(2).

Исходная версия mittorn, :

Можно. Про .so не уверен, можешь попробовать. Сделать статическую библиотеку (.a) - то же самое, что дописать в код.
И вообще используй syscall для такой функции, это стабильнее.
Там вся функция - вызов syscall.