mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
57da36ebcf
commit
7b25bd8ba2
3 changed files with 44 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Thu Oct 2 12:21:52 2014 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* ext/etc/etc.c (etc_nprocessors): New method.
|
||||||
|
Accepted by matz at RubyKaigi 2014.
|
||||||
|
[ruby-core:65142] [Feature #10267]
|
||||||
|
|
||||||
Thu Oct 2 07:56:49 2014 Eric Wong <e@80x24.org>
|
Thu Oct 2 07:56:49 2014 Eric Wong <e@80x24.org>
|
||||||
|
|
||||||
* iseq.c (rb_iseq_line_trace_each): explicit cast
|
* iseq.c (rb_iseq_line_trace_each): explicit cast
|
||||||
|
|
|
@ -891,6 +891,38 @@ io_pathconf(VALUE io, VALUE arg)
|
||||||
#define io_pathconf rb_f_notimplement
|
#define io_pathconf rb_f_notimplement
|
||||||
#endif
|
#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
|
* The Etc module provides access to information typically stored in
|
||||||
* files in the /etc directory on Unix systems.
|
* 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, "sysconf", etc_sysconf, 1);
|
||||||
rb_define_module_function(mEtc, "confstr", etc_confstr, 1);
|
rb_define_module_function(mEtc, "confstr", etc_confstr, 1);
|
||||||
rb_define_method(rb_cIO, "pathconf", io_pathconf, 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",
|
sPasswd = rb_struct_define_under(mEtc, "Passwd",
|
||||||
"name",
|
"name",
|
||||||
|
|
|
@ -159,4 +159,9 @@ class TestEtc < Test::Unit::TestCase
|
||||||
}
|
}
|
||||||
end if defined?(Etc::PC_PIPE_BUF)
|
end if defined?(Etc::PC_PIPE_BUF)
|
||||||
|
|
||||||
|
def test_nprocessors
|
||||||
|
n = Etc.nprocessors
|
||||||
|
assert_operator(1, :<=, n)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue