Search code examples
clinuxmultithreadingcpuprocessor

How to get the number of CPUs in Linux using C?


Is there an API to get the number of CPUs available in Linux? I mean, without using /proc/cpuinfo or any other sys-node file...

I've found this implementation using sched.h:

int GetCPUCount()
{
 cpu_set_t cs;
 CPU_ZERO(&cs);
 sched_getaffinity(0, sizeof(cs), &cs);

 int count = 0;
 for (int i = 0; i < 64; i++)
 {
  if (CPU_ISSET(i, &cs))
   count++;
  else
   break;
 }
 return count;
}

But, isn't there anything more higher level using common libraries?


Solution

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

    https://linux.die.net/man/3/get_nprocs