sys-uname 0.8.5-x86-mingw32 → 0.9.0-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +165 -155
- data/MANIFEST +11 -11
- data/README +39 -36
- data/Rakefile +50 -61
- data/doc/uname.txt +127 -127
- data/examples/uname_test.rb +42 -41
- data/lib/unix/sys/uname.rb +327 -0
- data/lib/windows/sys/uname.rb +465 -0
- data/sys-uname.gemspec +31 -27
- data/test/test_sys_uname.rb +457 -448
- metadata +31 -61
- data/lib/sys/uname.rb +0 -471
data/doc/uname.txt
CHANGED
@@ -1,127 +1,127 @@
|
|
1
|
-
== Description
|
2
|
-
A Ruby interface for getting operating system information. The name comes
|
3
|
-
from the Unix 'uname' command, but this library works on Windows as well.
|
4
|
-
|
5
|
-
== Synopsis
|
6
|
-
require 'sys/uname'
|
7
|
-
include Sys
|
8
|
-
|
9
|
-
# Unix
|
10
|
-
puts Uname.nodename => my_host
|
11
|
-
puts Uname.version => #1 Fri Oct 24 22:43:28 MDT 2003
|
12
|
-
puts Uname.sysname => Linux
|
13
|
-
puts Uname.machine => i686
|
14
|
-
puts Uname.release => 2.4.22-21mdk
|
15
|
-
|
16
|
-
p Uname.uname => Show all UnameStruct members
|
17
|
-
|
18
|
-
# Windows
|
19
|
-
u = Uname.uname
|
20
|
-
puts u.caption => 'Microsoft Windows XP Home Edition
|
21
|
-
puts u.csd_version => 'Service Pack 2'
|
22
|
-
|
23
|
-
== Constants
|
24
|
-
VERSION
|
25
|
-
The current version number of the sys-uname library. This is a String.
|
26
|
-
|
27
|
-
== Class Methods
|
28
|
-
Uname.sysname
|
29
|
-
Returns the operating system name. e.g. "SunOS"
|
30
|
-
|
31
|
-
Uname.nodename
|
32
|
-
Returns the nodename. This is usually, but not necessarily, the
|
33
|
-
same as the system's hostname.
|
34
|
-
|
35
|
-
You cannot currently set the nodename (root or otherwise). This may
|
36
|
-
be added in a future release.
|
37
|
-
|
38
|
-
Uname.machine
|
39
|
-
Returns the machine hardware type. e.g. "i686"
|
40
|
-
|
41
|
-
Uname.version
|
42
|
-
Returns the operating system version. e.g. "5.8". In the case of MS
|
43
|
-
Windows, it returns the version plus patch information, separated by
|
44
|
-
a hyphen, e.g. "2915-Service Pack 2".
|
45
|
-
|
46
|
-
Uname.release
|
47
|
-
Returns the operating system release. e.g. "2.2.16-3"
|
48
|
-
|
49
|
-
Uname.uname
|
50
|
-
Returns a struct of type UnameStruct that contains sysname, nodename,
|
51
|
-
machine, version, and release. On Solaris, it will also include
|
52
|
-
architecture and platform. On HP-UX, it will also include id_number.
|
53
|
-
|
54
|
-
MS Windows - there are many more, and different, fields in the struct.
|
55
|
-
Please see the MSDN documenation on the Win32_OperatingSystem WMI class
|
56
|
-
for a complete explanation of what each of these members mean.
|
57
|
-
|
58
|
-
== Solaris Only
|
59
|
-
Uname.architecture
|
60
|
-
Returns the instruction set architecture. e.g. "sparc"
|
61
|
-
|
62
|
-
Uname.platform
|
63
|
-
Returns the platform identifier. e.g. "SUNW,Sun-Blade-100"
|
64
|
-
|
65
|
-
Uname.isa_list
|
66
|
-
Returns a space separated string containing a list of all variant
|
67
|
-
instruction set architectures executable on the current system.
|
68
|
-
|
69
|
-
They are listed in order of performance, from best to worst.
|
70
|
-
|
71
|
-
Uname.hw_provider
|
72
|
-
Returns the name of the hardware manufacturer.
|
73
|
-
|
74
|
-
Uname.hw_serial_number
|
75
|
-
Returns the ASCII representation of the hardware-specific serial number
|
76
|
-
of the machine that executes the function.
|
77
|
-
|
78
|
-
Uname.srpc_domain
|
79
|
-
Returns the name of the Secure Remote Procedure Call domain, if any.
|
80
|
-
|
81
|
-
Uname.dhcp_cache
|
82
|
-
Returns a hexidecimal encoding, in String form, of the name of the
|
83
|
-
interface configured by boot(1M) followed by the DHCPACK reply from
|
84
|
-
the server.
|
85
|
-
|
86
|
-
== BSD Platforms Only (including OS X)
|
87
|
-
Uname.model
|
88
|
-
Returns the model type, e.g. "PowerBook5,1"
|
89
|
-
|
90
|
-
== HP-UX Only
|
91
|
-
Uname.id
|
92
|
-
Returns the id number, e.g. 234233587. This is a String, not a Fixnum.
|
93
|
-
|
94
|
-
== Notes
|
95
|
-
Not all of the information that you might be used to seeing with
|
96
|
-
a 'uname -a' is available. This may be added in future releases,
|
97
|
-
but since different implementations provide different information
|
98
|
-
(via different header files) it will be a bit of a pain.
|
99
|
-
|
100
|
-
Windows users - please see the MSDN documentation for the
|
101
|
-
Win32_OperatingSystem class for a complete list of what each of the
|
102
|
-
UnameStruct members mean.
|
103
|
-
|
104
|
-
== Known Bugs
|
105
|
-
None that I'm aware of. Please log any bugs on the project page at
|
106
|
-
http://www.rubyforge.org/projects/sysutils.
|
107
|
-
|
108
|
-
== Future Plans
|
109
|
-
Add additional info for Linux, Solaris, BSD.
|
110
|
-
|
111
|
-
== License
|
112
|
-
|
113
|
-
|
114
|
-
== Copyright
|
115
|
-
(C) 2002-
|
116
|
-
All Rights Reserved
|
117
|
-
|
118
|
-
== Warranty
|
119
|
-
This package is provided "as is" and without any express or
|
120
|
-
implied warranties, including, without limitation, the implied
|
121
|
-
warranties of merchantability and fitness for a particular purpose.
|
122
|
-
|
123
|
-
== Author
|
124
|
-
Daniel Berger
|
125
|
-
|
126
|
-
== See Also
|
127
|
-
uname(1) for unix, or WMI for MS Windows.
|
1
|
+
== Description
|
2
|
+
A Ruby interface for getting operating system information. The name comes
|
3
|
+
from the Unix 'uname' command, but this library works on Windows as well.
|
4
|
+
|
5
|
+
== Synopsis
|
6
|
+
require 'sys/uname'
|
7
|
+
include Sys
|
8
|
+
|
9
|
+
# Unix
|
10
|
+
puts Uname.nodename => my_host
|
11
|
+
puts Uname.version => #1 Fri Oct 24 22:43:28 MDT 2003
|
12
|
+
puts Uname.sysname => Linux
|
13
|
+
puts Uname.machine => i686
|
14
|
+
puts Uname.release => 2.4.22-21mdk
|
15
|
+
|
16
|
+
p Uname.uname => Show all UnameStruct members
|
17
|
+
|
18
|
+
# Windows
|
19
|
+
u = Uname.uname
|
20
|
+
puts u.caption => 'Microsoft Windows XP Home Edition
|
21
|
+
puts u.csd_version => 'Service Pack 2'
|
22
|
+
|
23
|
+
== Constants
|
24
|
+
VERSION
|
25
|
+
The current version number of the sys-uname library. This is a String.
|
26
|
+
|
27
|
+
== Class Methods
|
28
|
+
Uname.sysname
|
29
|
+
Returns the operating system name. e.g. "SunOS"
|
30
|
+
|
31
|
+
Uname.nodename
|
32
|
+
Returns the nodename. This is usually, but not necessarily, the
|
33
|
+
same as the system's hostname.
|
34
|
+
|
35
|
+
You cannot currently set the nodename (root or otherwise). This may
|
36
|
+
be added in a future release.
|
37
|
+
|
38
|
+
Uname.machine
|
39
|
+
Returns the machine hardware type. e.g. "i686"
|
40
|
+
|
41
|
+
Uname.version
|
42
|
+
Returns the operating system version. e.g. "5.8". In the case of MS
|
43
|
+
Windows, it returns the version plus patch information, separated by
|
44
|
+
a hyphen, e.g. "2915-Service Pack 2".
|
45
|
+
|
46
|
+
Uname.release
|
47
|
+
Returns the operating system release. e.g. "2.2.16-3"
|
48
|
+
|
49
|
+
Uname.uname
|
50
|
+
Returns a struct of type UnameStruct that contains sysname, nodename,
|
51
|
+
machine, version, and release. On Solaris, it will also include
|
52
|
+
architecture and platform. On HP-UX, it will also include id_number.
|
53
|
+
|
54
|
+
MS Windows - there are many more, and different, fields in the struct.
|
55
|
+
Please see the MSDN documenation on the Win32_OperatingSystem WMI class
|
56
|
+
for a complete explanation of what each of these members mean.
|
57
|
+
|
58
|
+
== Solaris Only
|
59
|
+
Uname.architecture
|
60
|
+
Returns the instruction set architecture. e.g. "sparc"
|
61
|
+
|
62
|
+
Uname.platform
|
63
|
+
Returns the platform identifier. e.g. "SUNW,Sun-Blade-100"
|
64
|
+
|
65
|
+
Uname.isa_list
|
66
|
+
Returns a space separated string containing a list of all variant
|
67
|
+
instruction set architectures executable on the current system.
|
68
|
+
|
69
|
+
They are listed in order of performance, from best to worst.
|
70
|
+
|
71
|
+
Uname.hw_provider
|
72
|
+
Returns the name of the hardware manufacturer.
|
73
|
+
|
74
|
+
Uname.hw_serial_number
|
75
|
+
Returns the ASCII representation of the hardware-specific serial number
|
76
|
+
of the machine that executes the function.
|
77
|
+
|
78
|
+
Uname.srpc_domain
|
79
|
+
Returns the name of the Secure Remote Procedure Call domain, if any.
|
80
|
+
|
81
|
+
Uname.dhcp_cache
|
82
|
+
Returns a hexidecimal encoding, in String form, of the name of the
|
83
|
+
interface configured by boot(1M) followed by the DHCPACK reply from
|
84
|
+
the server.
|
85
|
+
|
86
|
+
== BSD Platforms Only (including OS X)
|
87
|
+
Uname.model
|
88
|
+
Returns the model type, e.g. "PowerBook5,1"
|
89
|
+
|
90
|
+
== HP-UX Only
|
91
|
+
Uname.id
|
92
|
+
Returns the id number, e.g. 234233587. This is a String, not a Fixnum.
|
93
|
+
|
94
|
+
== Notes
|
95
|
+
Not all of the information that you might be used to seeing with
|
96
|
+
a 'uname -a' is available. This may be added in future releases,
|
97
|
+
but since different implementations provide different information
|
98
|
+
(via different header files) it will be a bit of a pain.
|
99
|
+
|
100
|
+
Windows users - please see the MSDN documentation for the
|
101
|
+
Win32_OperatingSystem class for a complete list of what each of the
|
102
|
+
UnameStruct members mean.
|
103
|
+
|
104
|
+
== Known Bugs
|
105
|
+
None that I'm aware of. Please log any bugs on the project page at
|
106
|
+
http://www.rubyforge.org/projects/sysutils.
|
107
|
+
|
108
|
+
== Future Plans
|
109
|
+
Add additional info for Linux, Solaris, BSD.
|
110
|
+
|
111
|
+
== License
|
112
|
+
Ruby's
|
113
|
+
|
114
|
+
== Copyright
|
115
|
+
(C) 2002-2012 Daniel J. Berger
|
116
|
+
All Rights Reserved
|
117
|
+
|
118
|
+
== Warranty
|
119
|
+
This package is provided "as is" and without any express or
|
120
|
+
implied warranties, including, without limitation, the implied
|
121
|
+
warranties of merchantability and fitness for a particular purpose.
|
122
|
+
|
123
|
+
== Author
|
124
|
+
Daniel Berger
|
125
|
+
|
126
|
+
== See Also
|
127
|
+
uname(1) for unix, or WMI for MS Windows.
|
data/examples/uname_test.rb
CHANGED
@@ -1,41 +1,42 @@
|
|
1
|
-
########################################################################
|
2
|
-
# uname_test.rb
|
3
|
-
#
|
4
|
-
# Generic test script for general futzing. Modify as you see fit. This
|
5
|
-
# should generally be run via the 'rake example' task.
|
6
|
-
########################################################################
|
7
|
-
require 'sys/uname'
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
puts
|
12
|
-
puts '
|
13
|
-
puts '
|
14
|
-
puts '
|
15
|
-
puts '
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
puts
|
21
|
-
puts '
|
22
|
-
puts '
|
23
|
-
puts '
|
24
|
-
puts '
|
25
|
-
puts '
|
26
|
-
puts '
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
puts
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
puts "
|
39
|
-
|
40
|
-
|
41
|
-
|
1
|
+
########################################################################
|
2
|
+
# uname_test.rb
|
3
|
+
#
|
4
|
+
# Generic test script for general futzing. Modify as you see fit. This
|
5
|
+
# should generally be run via the 'rake example' task.
|
6
|
+
########################################################################
|
7
|
+
require 'sys/uname'
|
8
|
+
require 'rbconfig'
|
9
|
+
include Sys
|
10
|
+
|
11
|
+
puts "VERSION: " + Uname::VERSION
|
12
|
+
puts 'Nodename: ' + Uname.nodename
|
13
|
+
puts 'Sysname: ' + Uname.sysname
|
14
|
+
puts 'Version: ' + Uname.version
|
15
|
+
puts 'Release: ' + Uname.release
|
16
|
+
puts 'Machine: ' + Uname.machine # May be "unknown" on Win32
|
17
|
+
|
18
|
+
if RbConfig::CONFIG['host_os'] =~ /sun|solaris/i
|
19
|
+
print "\nSolaris specific tests\n"
|
20
|
+
puts "==========================="
|
21
|
+
puts 'Architecture: ' + Uname.architecture
|
22
|
+
puts 'Platform: ' + Uname.platform
|
23
|
+
puts 'Instruction Set List: ' + Uname.isa_list.split.join(", ")
|
24
|
+
puts 'Hardware Provider: ' + Uname.hw_provider
|
25
|
+
puts 'Serial Number: ' + Uname.hw_serial_number.to_s
|
26
|
+
puts 'SRPC Domain: ' + Uname.srpc_domain # might be empty
|
27
|
+
puts 'DHCP Cache: ' + Uname.dhcp_cache # might be empty
|
28
|
+
end
|
29
|
+
|
30
|
+
if RbConfig::CONFIG['host_os'] =~ /powerpc|darwin|bsd|mach/i
|
31
|
+
print "\nBSD/OS X specific tests\n"
|
32
|
+
puts "======================="
|
33
|
+
puts 'Model: ' + Uname.model
|
34
|
+
end
|
35
|
+
|
36
|
+
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
37
|
+
print "\nHP-UX specific tests\n"
|
38
|
+
puts "========================"
|
39
|
+
puts "ID: " + Uname.id
|
40
|
+
end
|
41
|
+
|
42
|
+
print "\nTest finished successfully\n"
|
@@ -0,0 +1,327 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'rbconfig'
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
# The Sys module serves as a namespace only.
|
6
|
+
module Sys
|
7
|
+
# The Uname class encapsulates information about the system.
|
8
|
+
class Uname
|
9
|
+
extend FFI::Library
|
10
|
+
ffi_lib('c')
|
11
|
+
|
12
|
+
# Error raised if the uname() function fails.
|
13
|
+
class Error < StandardError; end
|
14
|
+
|
15
|
+
# The version of the sys-uname library
|
16
|
+
VERSION = '0.9.0'
|
17
|
+
|
18
|
+
# :stopdoc
|
19
|
+
|
20
|
+
# Buffer size for uname struct char arrays
|
21
|
+
case RbConfig::CONFIG['host_os']
|
22
|
+
when /linux/i
|
23
|
+
BUFSIZE = 65
|
24
|
+
when /bsd/i
|
25
|
+
BUFSIZE = 32 # TODO: version method chopped
|
26
|
+
when /sunos|solaris/i
|
27
|
+
BUFSIZE = 257
|
28
|
+
else
|
29
|
+
BUFSIZE = 256
|
30
|
+
end
|
31
|
+
|
32
|
+
attach_function :uname, [:pointer], :int
|
33
|
+
|
34
|
+
begin
|
35
|
+
attach_function :sysctl, [:pointer, :uint, :pointer, :pointer, :pointer, :size_t], :int
|
36
|
+
CTL_HW = 6 # Generic hardware/cpu
|
37
|
+
HW_MODEL = 2 # Specific machine model
|
38
|
+
rescue FFI::NotFoundError
|
39
|
+
# Ignore. Not suppored.
|
40
|
+
end
|
41
|
+
|
42
|
+
begin
|
43
|
+
attach_function :sysinfo, [:int, :pointer, :long], :long
|
44
|
+
SI_SYSNAME = 1 # OS name
|
45
|
+
SI_HOSTNAME = 2 # Node name
|
46
|
+
SI_RELEASE = 3 # Operating system release
|
47
|
+
SI_VERSION = 4 # Version field of utsname
|
48
|
+
SI_MACHINE = 5 # Machine type
|
49
|
+
SI_ARCHITECTURE = 6 # Instruction set architecture
|
50
|
+
SI_HW_SERIAL = 7 # Hardware serial number
|
51
|
+
SI_HW_PROVIDER = 8 # Hardware manufacturer
|
52
|
+
SI_SRPC_DOMAIN = 9 # Secure RPC domain
|
53
|
+
SI_PLATFORM = 513 # Platform identifier
|
54
|
+
SI_ISALIST = 514 # Supported isalist
|
55
|
+
SI_DHCP_CACHE = 515 # Kernel cached DHCPACK
|
56
|
+
rescue FFI::NotFoundError
|
57
|
+
# Ignore. Not suppored.
|
58
|
+
end
|
59
|
+
|
60
|
+
# Temporarily remove the uname method to avoid function name conflict
|
61
|
+
class << self
|
62
|
+
alias :uname_c :uname
|
63
|
+
remove_method :uname
|
64
|
+
end
|
65
|
+
|
66
|
+
class UnameFFIStruct < FFI::Struct
|
67
|
+
members = [
|
68
|
+
:sysname, [:char, BUFSIZE],
|
69
|
+
:nodename, [:char, BUFSIZE],
|
70
|
+
:release, [:char, BUFSIZE],
|
71
|
+
:version, [:char, BUFSIZE],
|
72
|
+
:machine, [:char, BUFSIZE]
|
73
|
+
]
|
74
|
+
|
75
|
+
if RbConfig::CONFIG['host_os'] =~ /linux/i
|
76
|
+
members.push(:domainname, [:char, BUFSIZE])
|
77
|
+
end
|
78
|
+
|
79
|
+
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
80
|
+
members.push(:__id_number, [:char, BUFSIZE])
|
81
|
+
end
|
82
|
+
|
83
|
+
layout(*members)
|
84
|
+
end
|
85
|
+
|
86
|
+
fields = %w[
|
87
|
+
sysname
|
88
|
+
nodename
|
89
|
+
release
|
90
|
+
version
|
91
|
+
machine
|
92
|
+
]
|
93
|
+
|
94
|
+
if RbConfig::CONFIG['host_os'] =~ /linux/i
|
95
|
+
fields.push('domainname')
|
96
|
+
end
|
97
|
+
|
98
|
+
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
99
|
+
fields.push('id_number')
|
100
|
+
end
|
101
|
+
|
102
|
+
if RbConfig::CONFIG['host_os'] =~ /sunos|solaris/i
|
103
|
+
fields.push(
|
104
|
+
'architecture',
|
105
|
+
'dhcp_cache',
|
106
|
+
'hw_provider',
|
107
|
+
'hw_serial',
|
108
|
+
'isa_list',
|
109
|
+
'platform',
|
110
|
+
'srpc_domain'
|
111
|
+
)
|
112
|
+
end
|
113
|
+
|
114
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin|bsd/i
|
115
|
+
fields.push('model')
|
116
|
+
end
|
117
|
+
|
118
|
+
# :startdoc:
|
119
|
+
|
120
|
+
UnameStruct = Struct.new("UnameStruct", *fields)
|
121
|
+
|
122
|
+
# Returns a struct that contains the sysname, nodename, machine, version
|
123
|
+
# and release of your system.
|
124
|
+
#
|
125
|
+
# On OS X it will also include the model.
|
126
|
+
#
|
127
|
+
# On Solaris, it will also include the architecture and platform.
|
128
|
+
#
|
129
|
+
# On HP-UX, it will also include the id_number.
|
130
|
+
#
|
131
|
+
# Example:
|
132
|
+
#
|
133
|
+
# require 'sys/uname'
|
134
|
+
#
|
135
|
+
# p Sys::Uname.uname
|
136
|
+
#
|
137
|
+
def self.uname
|
138
|
+
utsname = UnameFFIStruct.new
|
139
|
+
|
140
|
+
if uname_c(utsname) < 0
|
141
|
+
raise Error, "uname() function call failed"
|
142
|
+
end
|
143
|
+
|
144
|
+
struct = UnameStruct.new
|
145
|
+
struct[:sysname] = utsname[:sysname].to_s
|
146
|
+
struct[:nodename] = utsname[:nodename].to_s
|
147
|
+
struct[:release] = utsname[:release].to_s
|
148
|
+
struct[:version] = utsname[:version].to_s
|
149
|
+
struct[:machine] = utsname[:machine].to_s
|
150
|
+
|
151
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin|bsd/i
|
152
|
+
struct[:model] = get_model()
|
153
|
+
end
|
154
|
+
|
155
|
+
if RbConfig::CONFIG['host_os'] =~ /sunos|solaris/i
|
156
|
+
struct[:architecture] = get_si(SI_ARCHITECTURE)
|
157
|
+
struct[:platform] = get_si(SI_PLATFORM)
|
158
|
+
struct[:hw_serial] = get_si(SI_HW_SERIAL)
|
159
|
+
struct[:hw_provider] = get_si(SI_HW_PROVIDER)
|
160
|
+
struct[:srpc_domain] = get_si(SI_SRPC_DOMAIN)
|
161
|
+
struct[:isa_list] = get_si(SI_ISALIST)
|
162
|
+
struct[:dhcp_cache] = get_si(SI_DHCP_CACHE)
|
163
|
+
|
164
|
+
# FFI and Solaris don't get along so well, so we try again
|
165
|
+
struct[:sysname] = get_si(SI_SYSNAME) if struct.sysname.empty?
|
166
|
+
struct[:nodename] = get_si(SI_HOSTNAME) if struct.nodename.empty?
|
167
|
+
struct[:release] = get_si(SI_RELEASE) if struct.release.empty?
|
168
|
+
struct[:version] = get_si(SI_VERSION) if struct.version.empty?
|
169
|
+
struct[:machine] = get_si(SI_MACHINE) if struct.machine.empty?
|
170
|
+
end
|
171
|
+
|
172
|
+
if RbConfig::CONFIG['host_os'] =~ /hpux/i
|
173
|
+
struct[:id_number] = utsname[:__id_number].to_s
|
174
|
+
end
|
175
|
+
|
176
|
+
if RbConfig::CONFIG['host_os'] =~ /linux/i
|
177
|
+
struct[:domainname] = utsname[:domainname].to_s
|
178
|
+
end
|
179
|
+
|
180
|
+
# Let's add a members method that works for testing and compatibility
|
181
|
+
if struct.members.nil?
|
182
|
+
struct.instance_eval(%Q{
|
183
|
+
def members
|
184
|
+
@table.keys.map{ |k| k.to_s }
|
185
|
+
end
|
186
|
+
})
|
187
|
+
end
|
188
|
+
|
189
|
+
struct.freeze
|
190
|
+
end
|
191
|
+
|
192
|
+
# Returns the name of this implementation of the operating system.
|
193
|
+
#
|
194
|
+
# Example:
|
195
|
+
#
|
196
|
+
# Uname.sysname # => 'SunOS'
|
197
|
+
#
|
198
|
+
def self.sysname
|
199
|
+
uname.sysname
|
200
|
+
end
|
201
|
+
|
202
|
+
# Returns the name of this node within the communications network to
|
203
|
+
# which this node is attached, if any. This is often, but not
|
204
|
+
# necessarily, the same as the host name.
|
205
|
+
#
|
206
|
+
# Example:
|
207
|
+
#
|
208
|
+
# Uname.nodename # => 'your_host.foo.com'
|
209
|
+
#
|
210
|
+
def self.nodename
|
211
|
+
uname.nodename
|
212
|
+
end
|
213
|
+
|
214
|
+
# Returns the current release level of your operating system.
|
215
|
+
#
|
216
|
+
# Example:
|
217
|
+
#
|
218
|
+
# Uname.release # => '2.2.16-3'
|
219
|
+
#
|
220
|
+
def self.release
|
221
|
+
uname.release
|
222
|
+
end
|
223
|
+
|
224
|
+
# Returns the current version level of your operating system.
|
225
|
+
#
|
226
|
+
# Example:
|
227
|
+
#
|
228
|
+
# Uname.version # => '5.9'
|
229
|
+
#
|
230
|
+
def self.version
|
231
|
+
uname.version
|
232
|
+
end
|
233
|
+
|
234
|
+
# Returns the machine hardware type.
|
235
|
+
#
|
236
|
+
# Example:
|
237
|
+
#
|
238
|
+
# Uname.machine # => 'i686'
|
239
|
+
#
|
240
|
+
def self.machine
|
241
|
+
uname.machine
|
242
|
+
end
|
243
|
+
|
244
|
+
if defined? :sysctl
|
245
|
+
# Returns the model type.
|
246
|
+
#
|
247
|
+
# Example:
|
248
|
+
#
|
249
|
+
# Uname.model # => 'MacBookPro5,3'
|
250
|
+
#
|
251
|
+
def self.model
|
252
|
+
uname.model
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
if defined? :sysinfo
|
257
|
+
# The basic instruction set architecture of the current
|
258
|
+
# system, e.g. sparc, i386, etc.
|
259
|
+
#
|
260
|
+
def self.architecture
|
261
|
+
uname.architecture
|
262
|
+
end
|
263
|
+
|
264
|
+
# The specific model of the hardware platform, e.g Sun-Blade-1500, etc.
|
265
|
+
#
|
266
|
+
def self.platform
|
267
|
+
uname.platform
|
268
|
+
end
|
269
|
+
|
270
|
+
# The string consisting of the ASCII hexidecimal encoding of the name
|
271
|
+
# of the interface configured by boot(1M) followed by the DHCPACK reply
|
272
|
+
# from the server.
|
273
|
+
#
|
274
|
+
def self.dhcp_cache
|
275
|
+
uname.dhcp_cache
|
276
|
+
end
|
277
|
+
|
278
|
+
# The variant instruction set architectures executable on the
|
279
|
+
# current system.
|
280
|
+
#
|
281
|
+
def self.isa_list
|
282
|
+
uname.isa_list
|
283
|
+
end
|
284
|
+
|
285
|
+
# The ASCII representation of the hardware-specific serial number
|
286
|
+
# of the physical machine on which the function is executed.
|
287
|
+
#
|
288
|
+
def self.hw_serial
|
289
|
+
uname.hw_serial.to_i
|
290
|
+
end
|
291
|
+
|
292
|
+
# The name of the of the hardware provider.
|
293
|
+
#
|
294
|
+
def self.hw_provider
|
295
|
+
uname.hw_provider
|
296
|
+
end
|
297
|
+
|
298
|
+
# The Secure Remote Procedure Call domain name.
|
299
|
+
#
|
300
|
+
def self.srpc_domain
|
301
|
+
uname.srpc_domain
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
private
|
306
|
+
|
307
|
+
# Returns the model for systems that define sysctl().
|
308
|
+
#
|
309
|
+
def self.get_model
|
310
|
+
buf = 0.chr * BUFSIZE
|
311
|
+
mib = FFI::MemoryPointer.new(:int, 2).write_array_of_int([CTL_HW, HW_MODEL])
|
312
|
+
size = FFI::MemoryPointer.new(:long, 1).write_int(buf.size)
|
313
|
+
|
314
|
+
sysctl(mib, 2, buf, size, nil, 0)
|
315
|
+
|
316
|
+
buf.strip
|
317
|
+
end
|
318
|
+
|
319
|
+
# Returns the various sysinfo information based on +flag+.
|
320
|
+
#
|
321
|
+
def self.get_si(flag)
|
322
|
+
buf = 0.chr * BUFSIZE
|
323
|
+
sysinfo(flag, buf, BUFSIZE)
|
324
|
+
buf.strip
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|