How to get the number of CPUs in Linux using C?
#include <unistd.h>long number_of_processors = sysconf(_SC_NPROCESSORS_ONLN);
#include <stdio.h>#include <sys/sysinfo.h>int main(int argc, char *argv[]){ printf("This system has %d processors configured and " "%d processors available.\n", get_nprocs_conf(), get_nprocs()); return 0;}
This code (drawn from here) should work on both windows and *NIX platforms.
#ifdef _WIN32#define WIN32_LEAN_AND_MEAN#include <windows.h>#else#include <unistd.h>#endif#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>int main() { long nprocs = -1; long nprocs_max = -1;#ifdef _WIN32#ifndef _SC_NPROCESSORS_ONLNSYSTEM_INFO info;GetSystemInfo(&info);#define sysconf(a) info.dwNumberOfProcessors#define _SC_NPROCESSORS_ONLN#endif#endif#ifdef _SC_NPROCESSORS_ONLN nprocs = sysconf(_SC_NPROCESSORS_ONLN); if (nprocs < 1) { fprintf(stderr, "Could not determine number of CPUs online:\n%s\n", strerror (errno)); exit (EXIT_FAILURE); } nprocs_max = sysconf(_SC_NPROCESSORS_CONF); if (nprocs_max < 1) { fprintf(stderr, "Could not determine number of CPUs configured:\n%s\n", strerror (errno)); exit (EXIT_FAILURE); } printf ("%ld of %ld processors online\n",nprocs, nprocs_max); exit (EXIT_SUCCESS);#else fprintf(stderr, "Could not determine number of CPUs"); exit (EXIT_FAILURE);#endif}