2017-01-24 4 views
1

Ich versuche sched_setscheduler() zu verwenden, um die Scheduling-Richtlinie eines bestimmten Prozesses festzulegen. Gemäß seiner man page sind die verfügbaren Flags SCHED_FIFO,SCHED_RR,SCHED_OTHER,SCHED_BATCH,SCHED_IDLE.Verwendung von Scheduling-Flags SCHED_BATCH oder SCHED_IDLE gibt Fehler

Außer SCHED_BATCH und SCHED_IDLE kann ich alle Flags verwenden und mein Programm erfolgreich kompilieren. Jedoch unter Verwendung von, sagen wir, SCHED_BATCH, bekomme ich

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

Ein Beispielcode, mein Problem zu veranschaulichen, ist:

#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; 
} 

Wie in der man-Seite erwähnt, habe ich ein Objekt von TYPR sched_param erstellt, Set sein passender sched_priority Wert und übergab es an die Funktion.

Meine Linux-Kernel-Version ist 4.4.40 und ich benutze Ubuntu 14.04.5 LTS. Meine GCC-Version ist 6.2.0.

Wie kann ich das beheben?

Antwort

3

SCHED_BATCH und SCHED_IDLE sind Linux-spezifisch und gehören nicht zum POSIX-Standard.

Glibc setzt sie nur frei, wenn Sie _GNU_SOURCE definieren. Also, tun:

#define _GNU_SOURCE 

vor einschließlich der Header.

+0

Vielen Dank! Das hat funktioniert. Könnten Sie mir bitte eine Referenz geben, damit ich mehr darüber erfahren kann? – GoodDeeds

+0

Sie können POSIX doc [hier] (http://pubs.opengroup.org/onlinepubs/9699919799//basedefs/sched.h.html) überprüfen. AFAIC, die zusätzlichen Features/Erweiterungen, die durch '_GNU_SOURCE' aktiviert wurden, sind nicht sehr gut dokumentiert. Es ist meist in den einzelnen Manpages zu finden. –

Verwandte Themen