2016-04-22 23 views
3

Ich schreibe ein Programm, das auf Einzelkern ausgeführt werden musste. Um es zu einzelnen Kern zu binden, ich bin mit sched_setaffinity(), aber der Compiler gibt Warnung:implizite Erklärung der Funktion 'sched_setaffinity'

implicit declaration of function ‘sched_setaffinity’

Mein Testcode ist:

#include <stdio.h> 
#include <unistd.h> 
#define _GNU_SOURCE 
#include <sched.h> 

int main() 
{ 
    unsigned long cpuMask = 2; 
    sched_setaffinity(0, sizeof(cpuMask), &cpuMask); 
    printf("Hello world"); 
    //some other function calls 
} 

Können Sie mir bitte helfen zu finde es heraus. Eigentlich wird Code kompiliert und ausgeführt, aber ich bin mir nicht sicher, ob er auf einem einzelnen Kern läuft oder Kerne wechselt.

ich Ubuntu 15.10 und gcc Version 5.2.1

+0

ich Ubuntu 15.10 und gcc Version 5.2.1 – Aadarsh

Antwort

7

Sie bin mit brauchen #define _GNU_SOURCE zu einem Top zu bewegen. In man sched_setaffinity heißt es:

#define _GNU_SOURCE    /* See feature_test_macros(7) */ 

während in man 7 feature_test_macros heißt es:

HINWEIS: Um wirksam zu sein, muss ein Feature-Test-Makro vor einschließlich aller Header-Dateien definiert werden. Dies kann entweder im Kompilierbefehl (cc -DMACRO = Wert) oder durch Definieren des Makros innerhalb von des Quellcodes erfolgen, bevor Header hinzugefügt werden.

So am Ende des Tages Ihr Code sollte wie folgt aussehen:

#define _GNU_SOURCE 
#include <stdio.h> 
#include <unistd.h> 
#include <sched.h> 


int main() 
{ 
    unsigned long cpuMask = 2; 
    sched_setaffinity(0, sizeof(cpuMask), &cpuMask); 
    printf("Hello world"); 
    //some other function calls 
} 
+0

Dank bin mit, es funktionierte – Aadarsh

Verwandte Themen