2017-01-24 2 views
1

J'essaie d'utiliser sched_setscheduler() pour définir la politique d'ordonnancement d'un processus donné. Selon son man page, les indicateurs disponibles sont SCHED_FIFO,SCHED_RR,SCHED_OTHER,SCHED_BATCH,SCHED_IDLE.L'utilisation des indicateurs de stratégie d'ordonnancement SCHED_BATCH ou SCHED_IDLE donne une erreur

Sauf pour SCHED_BATCH et SCHED_IDLE, je suis en mesure d'utiliser tous les drapeaux et compiler avec succès mon programme. Cependant, en utilisant, par exemple, SCHED_BATCH, je reçois

error: ‘SCHED_BATCH’ undeclared (first use in this function) 
sched_setscheduler(getpid(),SCHED_BATCH,&param); 

Un exemple de code pour illustrer mon problème est:

#include<stdio.h> 
#include<unistd.h> 
#include<sched.h> 
#include<time.h> 
#include<stdlib.h> 
#include<sys/types.h> 
int main() 
{ 
    struct sched_param p; 
    p.sched_priority=0; 
    sched_setscheduler(getpid(),SCHED_BATCH,&p); 
    return 0; 
} 

Comme mentionné dans la page de manuel, j'ai créé un objet de typr sched_param, ensemble sa valeur sched_priority appropriée et l'a transmise à la fonction.

Ma version du noyau Linux est 4.4.40 et j'utilise Ubuntu 14.04.5 LTS. Ma version gcc est 6.2.0.

Comment résoudre ce problème?

Répondre

3

SCHED_BATCH et SCHED_IDLE sont spécifiques à Linux et ne font pas partie de la norme POSIX.

Glibc ne les expose pas sauf si vous définissez _GNU_SOURCE. Donc, faites:

#define _GNU_SOURCE 

avant d'inclure les en-têtes.

+0

Merci! Ça a marché. Pourriez-vous s'il vous plaît me diriger vers une référence afin que je puisse en lire plus à ce sujet? – GoodDeeds

+0

Vous pouvez consulter le document POSIX [ici] (http://pubs.opengroup.org/onlinepubs/9699919799//basedefs/sched.h.html). AFAIC, les fonctionnalités/extensions supplémentaires activées par '_GNU_SOURCE' ne sont pas très bien documentées. Il se trouve principalement dans les pages man individuelles. –