Подробности
[В начало]
Проблема в стандарте № S0504
Краткое описание
Функция sched_setscheduler() всегда возвращает 0, а не предыдущий метод управления задачей
Подробное описание
В соответствии со стандартом LSB 3.1 в случае успешного завершения функция sched_setscheduler() должна вернуть предыдущий метод управления задачей.
Но если запустить следующий код с правами root, то sched_setscheduler() всегда вернет 0.
Это поведение не противоречит man страницам.
#include <stdio.h>
#include <sched.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char* argv[])
{
struct sched_param param;
int res;
param.sched_priority=3;
res=sched_setscheduler(getpid(), SCHED_FIFO , ¶m);
printf("res: %d, errno %d\n", res, errno);
res=sched_setscheduler(getpid(), SCHED_RR, ¶m);
printf("res: %d, errno %d\n", res, errno);
res=sched_setscheduler(getpid(), SCHED_FIFO , ¶m);
printf("res: %d, errno %d\n", res, errno);
return 0;
}
Раздел стандарта
Linux Standard Base Core Specification 3.1, Chapter 13. Base Libraries, 13.5. Interface Definitions for libc, description of sched_setscheduler() interface.
Способы устранения
Исправить стандарт LSB
Принято
LSB Bugzilla, 1661
Статус
Исправлена в LSB 3.1 Update 1
[В начало]