diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-02 03:23:26 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-02 03:23:26 +0000 |
commit | 7b25bd8ba247ba7f0c1b3542b89aac220f0564ed (patch) | |
tree | 36433f05b9e1eb57fc8b9da1b1e64bb1aff46900 /ext/etc | |
parent | 57da36ebcfafa68b988a2b5b23e645f2aecc724c (diff) |
* ext/etc/etc.c (etc_nprocessors): New method.
Accepted by matz at RubyKaigi 2014.
[ruby-core:65142] [Feature #10267]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/etc')
-rw-r--r-- | ext/etc/etc.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/ext/etc/etc.c b/ext/etc/etc.c index 6168ed1510..2546560713 100644 --- a/ext/etc/etc.c +++ b/ext/etc/etc.c @@ -891,6 +891,38 @@ io_pathconf(VALUE io, VALUE arg) #define io_pathconf rb_f_notimplement #endif +#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN) +/* + * Returns the number of online processors. + * + * The result is intended as the number of processes to + * use all available processors. + * + * This method is implemented as: + * - sysconf(_SC_NPROCESSORS_ONLN): GNU/Linux, NetBSD, FreeBSD, OpenBSD, DragonFly BSD, OpenIndiana, Mac OS X, AIX + * + * Example: + * + * require 'etc' + * p Etc.nprocessors #=> 4 + * + */ +static VALUE +etc_nprocessors(VALUE obj) +{ + long ret; + + errno = 0; + ret = sysconf(_SC_NPROCESSORS_ONLN); + if (ret == -1) { + rb_sys_fail("sysconf(_SC_NPROCESSORS_ONLN)"); + } + return LONG2NUM(ret); +} +#else +#define etc_nprocessors rb_f_notimplement +#endif + /* * The Etc module provides access to information typically stored in * files in the /etc directory on Unix systems. @@ -946,6 +978,7 @@ Init_etc(void) rb_define_module_function(mEtc, "sysconf", etc_sysconf, 1); rb_define_module_function(mEtc, "confstr", etc_confstr, 1); rb_define_method(rb_cIO, "pathconf", io_pathconf, 1); + rb_define_module_function(mEtc, "nprocessors", etc_nprocessors, 0); sPasswd = rb_struct_define_under(mEtc, "Passwd", "name", |