如果没有包装在if块中,为什么sched_setscheduler()不起作用?

时间:2013-05-11 21:49:01

标签: c scheduled-tasks real-time

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

1 个答案:

答案 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返回,因此实际上无效。