3

以下代码有效并且需要“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 编译。

4

1 回答 1

3

很可能sched_setscheduler在您的第二个示例中不起作用。您只是忽略了可能不是的返回值0

由于您忽略了返回值,因此您实际上并不知道它是否有效。

查看手册页sched_setscheduler会在 RETURN VALUE 下找到

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实际上并没有工作。

于 2013-05-11T21:57:13.373 回答