Как правильно использовать _syscall3 - PullRequest
4 голосов
/ 05 сентября 2011

Наш встроенный Linux имеет возможность устанавливать привязку к процессору, однако ucLibc не поддерживает функции привязки sched_ {set / get}.

Следовательно, мы пытаемся использовать интерфейс syscall дляпозвони в ядро.Мы написали:

#include <sys/syscall.h>
_syscall3 (int, sched_setaffinity, pid_t, pid, unsigned int, len, unsigned long *, user_mask_ptr)
_syscall3 (int, sched_getaffinity, pid_t, pid, unsigned int, len, unsigned long *, user_mask_ptr)

Компилируя это с обычным gcc (x86, Fedora Linux, gcc 4.1.2 Redhat), мы получаем:

bind.c:114: error: expected declaration specifiers or â...â before âsched_setaffinityâ
bind.c:114: error: expected declaration specifiers or â...â before âpid_tâ
bind.c:114: error: expected declaration specifiers or â...â before âpidâ
bind.c:114: error: expected declaration specifiers or â...â before âlenâ
bind.c:114: error: expected declaration specifiers or â...â before âuser_mask_ptrâ

Как правильно использовать _syscall3чтобы заставить это работать?

Спасибо.

1 Ответ

3 голосов
/ 05 сентября 2011

Вы должны использовать оболочку системного вызова:

syscall(__NR_sched_setaffinity, pid, len, user_mask_ptr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...