This following code works and requires "root" authentication:
struct sched_param param;
param.sched_priority = 99;
if (sched_setscheduler(0, SCHED_FIFO, & param) != 0) {
perror("sched_setscheduler");
exit(EXIT_FAILURE);
}
However, this one seems working (no error) but has no effect and does not requires "root" authentication:
struct sched_param param;
param.sched_priority = 99;
sched_setscheduler(0, SCHED_FIFO, & param);
Why ? I compile with gcc / Ubuntu 13.
Most likely sched_setscheduler
didn't work in your second example. You just ignored the return value which probably wasn't 0
.
Since you ignored the return value you do not actually know if it worked.
Looking at the man page for sched_setscheduler
you will find this under 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.
If -1
is returned errno is set and perror prints a human readable string for the error.
Since you said -1
was returned from the second example sched_setscheduler
did not actually work.