Подробности

[В начало]

Проблема в стандарте № 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

[В начало]