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> | ||||
| 
 | ||||
| 	* 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 | ||||
| #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", | ||||
|  |  | |||
|  | @ -159,4 +159,9 @@ class TestEtc < Test::Unit::TestCase | |||
|     } | ||||
|   end if defined?(Etc::PC_PIPE_BUF) | ||||
| 
 | ||||
|   def test_nprocessors | ||||
|     n = Etc.nprocessors | ||||
|     assert_operator(1, :<=, n) | ||||
|   end | ||||
| 
 | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 akr
						akr