我们的嵌入式Linux可以设置CPU亲和力,但是ucLibc不支持sched_ {set/get}亲和力功能。
因此,我们正在尝试使用syscall接口(interface)调用内核。我们写了:
#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
使其起作用?谢谢。
最佳答案
您应该使用syscall包装器:
syscall(__NR_sched_setaffinity, pid, len, user_mask_ptr);