For this purpose we use sysconf() as it is the preferred platform neutral interface for getting this sort of information. Based on Dave Chinner proposal. Signed-off-by: Stanislav Kholmanskikh <stanislav.kholmanskikh@xxxxxxxxxx> --- src/feature.c | 31 ++++++++++++++++++++++++++++--- 1 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/feature.c b/src/feature.c index 2619ca5..a3ce9b8 100644 --- a/src/feature.c +++ b/src/feature.c @@ -30,6 +30,7 @@ * Return code: 0 is true, anything else is error/not supported * * Test for machine features + * -o report a number of online cpus * -s report pagesize * -w report bits per long */ @@ -39,6 +40,7 @@ #include <sys/quota.h> #include <sys/resource.h> #include <signal.h> +#include <unistd.h> #ifdef HAVE_XFS_XQM_H #include <xfs/xqm.h> @@ -64,7 +66,7 @@ usage(void) fprintf(stderr, "Usage: feature [-v] -<q|u|g|p|U|G|P> <filesystem>\n"); fprintf(stderr, " feature [-v] -c <file>\n"); fprintf(stderr, " feature [-v] -t <file>\n"); - fprintf(stderr, " feature -s | -w\n"); + fprintf(stderr, " feature -o | -s | -w\n"); exit(1); } @@ -212,9 +214,10 @@ main(int argc, char **argv) int uflag = 0; int Uflag = 0; int wflag = 0; + int oflag = 0; char *fs = NULL; - while ((c = getopt(argc, argv, "ctgGpPqsuUvw")) != EOF) { + while ((c = getopt(argc, argv, "ctgGopPqsuUvw")) != EOF) { switch (c) { case 'c': cflag++; @@ -228,6 +231,9 @@ main(int argc, char **argv) case 'G': Gflag++; break; + case 'o': + oflag++; + break; case 'p': pflag++; break; @@ -262,7 +268,7 @@ main(int argc, char **argv) if (optind != argc-1) /* need a device */ usage(); fs = argv[argc-1]; - } else if (wflag || sflag) { + } else if (wflag || sflag || oflag) { if (optind != argc) usage(); } else @@ -306,6 +312,25 @@ bozo! #endif exit(0); } + if (oflag) { + long ncpus; + +#if defined(_SC_NPROCESSORS_ONLN) + /* Linux */ + ncpus = sysconf(_SC_NPROCESSORS_ONLN); +#elif defined(_SC_NPROC_ONLN) + /* IRIX */ + ncpus = sysconf(_SC_NPROC_ONLN); +#else + ncpus = 1; +#endif + if (ncpus == -1) + ncpus = 1; + + printf("%ld\n", ncpus); + + exit(0); + } fprintf(stderr, "feature: dunno what you're after.\n"); return(1); -- 1.7.1 _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs