Module: FFI::LibC

Extended by:
Library
Defined in:
lib/ffi/libc/af.rb,
lib/ffi/libc/libc.rb,
lib/ffi/libc/types.rb,
lib/ffi/libc/rusage.rb,
lib/ffi/libc/ifaddrs.rb,
lib/ffi/libc/in_addr.rb,
lib/ffi/libc/timeval.rb,
lib/ffi/libc/in6_addr.rb,
lib/ffi/libc/sockaddr.rb,
lib/ffi/libc/timezone.rb,
lib/ffi/libc/sockaddr_dl.rb,
lib/ffi/libc/sockaddr_in.rb,
lib/ffi/libc/sockaddr_in6.rb,
lib/ffi/libc/ifaddrs_union.rb,
lib/ffi/libc/sockaddr_family.rb

Defined Under Namespace

Modules: AF Classes: Ifaddrs, IfaddrsUnion, In6Addr, InAddr, RUsage, Sockaddr, SockaddrDL, SockaddrFamily, SockaddrIn, SockaddrIn6, Timeval, Timezone

Constant Summary collapse

NULL =

The NULL constant

nil
NI_MAXHOST =
1024
NI_MAXSERV =
32
NI_NUMERICHOST =

Don't try to look up hostname.

1
NI_NUMERICSERV =

Don't convert port number to name.

2
NI_NOFQDN =

Only return nodename portion.

4
NI_NAMEREQD =

Don't return numeric addresses.

8
NI_DGRAM =

Look up UDP service rather than TCP.

16
RUSAGE_SELF =

bits/resource.h (Linux) / sys/resource.h (Darwin)

0
RUSAGE_CHILDREN =
-1
RUSAGE_THREAD =

Linux/glibc only

1

Class Method Summary collapse

Class Method Details

.each_ifaddr {|ifaddr| ... } ⇒ Enumerator

Enumerates over the Interface Addresses.

Yields:

  • (ifaddr)

    The given block will be passed each Interface Address.

Yield Parameters:

  • ifaddr (Ifaddrs)

    An Interface Address.

Since:

  • 0.1.0

Returns:

  • If no block is given, an enumerator will be returned.



165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/ffi/libc/libc.rb', line 165

def self.each_ifaddr
  return enum_for(__method__) unless block_given?

  ptr = MemoryPointer.new(:pointer)

  if getifaddrs(ptr) == -1
    raise_error
  end

  if (ifaddrs = ptr.get_pointer(0)).null?
    return
  end

  ifaddr = Ifaddrs.new(ifaddrs)

  while ifaddr
    yield ifaddr

    ifaddr = ifaddr.next
  end

  freeifaddrs(ifaddrs)
end

.raise_error(error = self.errno) ⇒ Object



26
27
28
# File 'lib/ffi/libc/libc.rb', line 26

def self.raise_error(error=self.errno)
  raise(strerror(error))
end

.rusage(who = RUSAGE_SELF) ⇒ RUsage

Gets the RUsage for the user.

Raises:

  • An error has occurred.

Since:

  • 0.1.0

Parameters:

  • (defaults to: RUSAGE_SELF)

    Whome to get RUsage statistics for.

Returns:

  • The RUsage statistics.



210
211
212
213
214
215
216
217
218
# File 'lib/ffi/libc/libc.rb', line 210

def self.rusage(who=RUSAGE_SELF)
  rusage = RUsage.new

  unless (ret = getrusage(who,rusage)) == 0
    raise_error(ret)
  end

  return rusage
end