1/* 2 * Copyright (C) 2017 Denys Vlasenko <vda.linux@googlemail.com> 3 * 4 * Licensed under GPLv2, see LICENSE in this source tree 5 */ 6//config:config NPROC 7//config: bool "nproc (248 bytes)" 8//config: default y 9//config: help 10//config: Print number of CPUs 11 12//applet:IF_NPROC(APPLET_NOFORK(nproc, nproc, BB_DIR_USR_BIN, BB_SUID_DROP, nproc)) 13 14//kbuild:lib-$(CONFIG_NPROC) += nproc.o 15 16//usage:#define nproc_trivial_usage 17//usage: "" 18//TODO: "[--all] [--ignore=N]" 19//usage:#define nproc_full_usage "\n\n" 20//usage: "Print number of CPUs" 21 22#include <sched.h> 23#include "libbb.h" 24 25int nproc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 26int nproc_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) 27{ 28 unsigned long mask[1024]; 29 unsigned i, count = 0; 30 31 //getopt32(argv, ""); 32 33 //if --all, count /sys/devices/system/cpu/cpuN dirs, else: 34 35 if (sched_getaffinity(0, sizeof(mask), (void*)mask) == 0) { 36 for (i = 0; i < ARRAY_SIZE(mask); i++) { 37 unsigned long m = mask[i]; 38 while (m) { 39 if (m & 1) 40 count++; 41 m >>= 1; 42 } 43 } 44 } 45 if (count == 0) 46 count++; 47 printf("%u\n", count); 48 49 return 0; 50} 51