以下代码有效且需要“root”身份验证:
struct sched_param param;
param.sched_priority = 99;
if (sched_setscheduler(0, SCHED_FIFO, & param) != 0) {
perror("sched_setscheduler");
exit(EXIT_FAILURE);
}
但是,这个似乎有效(没有错误)但没有效果,也不需要“root”身份验证:
struct sched_param param;
param.sched_priority = 99;
sched_setscheduler(0, SCHED_FIFO, & param);
为什么?我用gcc / Ubuntu 13编译。
答案 0 :(得分:3)
在您的第二个示例中,sched_setscheduler
很可能无法正常工作。您只是忽略了可能不是0
的返回值。
由于您忽略了返回值,因此您实际上并不知道它是否有效。
查看sched_setscheduler
的手册页,您将在返回值
RETURN VALUE
On success, sched_setscheduler() returns zero.
On success, sched_getscheduler() returns the policy for the process (a nonnegative integer).
On error, -1 is returned, and errno is set appropriately.
如果返回-1
,则设置errno,perror将为错误打印一个人类可读的字符串。
由于您说第-1
项已从第二个示例sched_setscheduler
返回,因此实际上无效。