Class LinuxLibcFunctions
java.lang.Object
oshi.ffm.ForeignFunctions
oshi.ffm.linux.LinuxLibcFunctions
FFM bindings for Linux libc functions used by OSHI.
Covers: getpid, gettid, syscall, getloadavg, sysinfo, statvfs,
gethostname, getaddrinfo/freeaddrinfo/gai_strerror, and getrlimit.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StructLayoutstruct addrinfolayout (64-bit Linux).static final intstatic final StructLayoutstruct rlimitlayout: twounsigned longfields.static final intstatic final StructLayoutstruct statvfslayout (64-bit Linux, no_f_unusedpadding field).static final StructLayoutstruct sysinfolayout (64-bit Linux).Fields inherited from class ForeignFunctions
CAPTURE_CALL_STATE, CAPTURED_STATE_LAYOUT, ERRNO_HANDLE, LIBRARY_ARENA, LINKER, SYMBOL_LOOKUP -
Method Summary
Modifier and TypeMethodDescriptionstatic StringaddrinfoCanoname(MemorySegment resPtr, Arena arena) Readsai_canonnamefrom the first addrinfo result pointer.static voidCallsfreeaddrinfo(struct addrinfo *res).static StringgaiStrerror(int errcode, Arena arena) Callsgai_strerror(int errcode)and returns the error string.static intgetaddrinfo(MemorySegment node, MemorySegment service, MemorySegment hints, MemorySegment res) Callsgetaddrinfo(node, service, hints, res).static intgethostname(MemorySegment buf, long len) Callsgethostname(char *name, size_t len).static intgetloadavg(MemorySegment loadavg, int nelem) Callsgetloadavg(double[] loadavg, int nelem).static intgetpid()Callsgetpid().static intgetrlimit(int resource, MemorySegment rlim) Callsgetrlimit(int resource, struct rlimit *rlim).static intgettid()Callsgettid()directly.static booleanReturns whethergettid()is directly available in libc.static longrlimitCur(MemorySegment rlim) Readsrlim_curfrom a rlimit segment.static longrlimitMax(MemorySegment rlim) Readsrlim_maxfrom a rlimit segment.static intstatvfs(MemorySegment path, MemorySegment buf) Callsstatvfs(const char *path, struct statvfs *buf).static longReadsf_bavailfrom a statvfs segment.static longReadsf_bfreefrom a statvfs segment.static longReadsf_blocksfrom a statvfs segment.static longReadsf_ffreefrom a statvfs segment.static longReadsf_filesfrom a statvfs segment.static longReadsf_frsizefrom a statvfs segment.static longCallssyscall(SYS_GETTID).static intsysinfo(MemorySegment info) Callssysinfo(struct sysinfo *info).static intsysinfoProcs(MemorySegment info) Reads theprocsfield from a sysinfo segment.Methods inherited from class ForeignFunctions
downcall, getByteArrayFromNativePointer, getErrno, getStringFromNativePointer, getStructFromNativePointer, lib, libraryLookup
-
Field Details
-
RLIMIT_NOFILE
public static final int RLIMIT_NOFILE- See Also:
-
AI_CANONNAME
public static final int AI_CANONNAME- See Also:
-
SYSINFO_LAYOUT
struct sysinfolayout (64-bit Linux).long uptime (8) long[3] loads (24) long totalram (8) long freeram (8) long sharedram (8) long bufferram (8) long totalswap (8) long freeswap (8) short procs (2) ... padding/high memory fields follow
-
STATVFS_LAYOUT
struct statvfslayout (64-bit Linux, no_f_unusedpadding field). -
RLIMIT_LAYOUT
struct rlimitlayout: twounsigned longfields. -
ADDRINFO_LAYOUT
struct addrinfolayout (64-bit Linux).int ai_flags (4) int ai_family (4) int ai_socktype (4) int ai_protocol (4) long ai_addrlen (8) -- socklen_t padded to 8 ptr ai_addr (8) ptr ai_canonname (8) -- offset 32 ptr ai_next (8)
-
-
Method Details
-
hasGettid
public static boolean hasGettid()Returns whethergettid()is directly available in libc.- Returns:
trueifgettidis available
-
getpid
-
gettid
Callsgettid()directly. Only valid ifhasGettid()is true.- Returns:
- the thread ID of the calling thread
- Throws:
Throwable- if the native call fails
-
syscallGettid
-
getloadavg
Callsgetloadavg(double[] loadavg, int nelem).- Parameters:
loadavg- pre-allocated segment ofnelemdoublesnelem- number of load average values to retrieve (1–3)- Returns:
- number of samples set, or -1 on error
- Throws:
Throwable
-
sysinfo
Callssysinfo(struct sysinfo *info).- Parameters:
info- segment allocated withSYSINFO_LAYOUT- Returns:
- 0 on success, -1 on error
- Throws:
Throwable
-
sysinfoProcs
Reads theprocsfield from a sysinfo segment.- Parameters:
info- segment populated bysysinfo(MemorySegment)- Returns:
- number of current processes
-
statvfs
Callsstatvfs(const char *path, struct statvfs *buf).- Parameters:
path- path segment (null-terminated UTF-8)buf- segment allocated withSTATVFS_LAYOUT- Returns:
- 0 on success, -1 on error
- Throws:
Throwable
-
statvfsFrsize
Readsf_frsizefrom a statvfs segment.- Parameters:
buf- segment populated bystatvfs(MemorySegment, MemorySegment)- Returns:
- fragment size in bytes
-
statvfsBlocks
Readsf_blocksfrom a statvfs segment.- Parameters:
buf- segment populated bystatvfs(MemorySegment, MemorySegment)- Returns:
- total data blocks in filesystem
-
statvfsBfree
Readsf_bfreefrom a statvfs segment.- Parameters:
buf- segment populated bystatvfs(MemorySegment, MemorySegment)- Returns:
- free blocks in filesystem
-
statvfsBavail
Readsf_bavailfrom a statvfs segment.- Parameters:
buf- segment populated bystatvfs(MemorySegment, MemorySegment)- Returns:
- free blocks available to unprivileged users
-
statvfsFiles
Readsf_filesfrom a statvfs segment.- Parameters:
buf- segment populated bystatvfs(MemorySegment, MemorySegment)- Returns:
- total file nodes in filesystem
-
statvfsFfree
Readsf_ffreefrom a statvfs segment.- Parameters:
buf- segment populated bystatvfs(MemorySegment, MemorySegment)- Returns:
- free file nodes in filesystem
-
gethostname
Callsgethostname(char *name, size_t len).- Parameters:
buf- segment of at leastlenbyteslen- buffer length- Returns:
- 0 on success, -1 on error
- Throws:
Throwable
-
getaddrinfo
public static int getaddrinfo(MemorySegment node, MemorySegment service, MemorySegment hints, MemorySegment res) throws Throwable Callsgetaddrinfo(node, service, hints, res).- Parameters:
node- hostname segment (null-terminated UTF-8)service- NULL segment or service namehints- segment allocated withADDRINFO_LAYOUT, or NULLres- pointer-to-pointer output segment (ADDRESS-sized)- Returns:
- 0 on success, non-zero error code on failure
- Throws:
Throwable
-
freeaddrinfo
Callsfreeaddrinfo(struct addrinfo *res).- Parameters:
res- the addrinfo pointer returned bygetaddrinfo- Throws:
Throwable
-
gaiStrerror
-
addrinfoCanoname
Readsai_canonnamefrom the first addrinfo result pointer.- Parameters:
resPtr- the raw pointer value stored in the output segment aftergetaddrinfoarena- arena to scope the reinterpret- Returns:
- the canonical name string, or
nullif the pointer is NULL
-
getrlimit
Callsgetrlimit(int resource, struct rlimit *rlim).- Parameters:
resource- resource constant (e.g.RLIMIT_NOFILE)rlim- segment allocated withRLIMIT_LAYOUT- Returns:
- 0 on success, -1 on error
- Throws:
Throwable
-
rlimitCur
Readsrlim_curfrom a rlimit segment.- Parameters:
rlim- segment populated bygetrlimit(int, MemorySegment)- Returns:
- the soft resource limit
-
rlimitMax
Readsrlim_maxfrom a rlimit segment.- Parameters:
rlim- segment populated bygetrlimit(int, MemorySegment)- Returns:
- the hard resource limit
-