POSIX_T...ET_INFO(3POSIX)

πŸ’– PROLOG πŸ’–

okay bestie, real talk before anything else: this page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ (so like, go consult the corresponding Linux manual page for the tea on Linux behavior), or the interface may just... not be implemented on Linux at all. πŸ™ˆ no cap.


✨ NAME ✨

posix_typed_mem_get_info β€” query typed memory information (ADVANCED REALTIME)


πŸŽ€ SYNOPSIS πŸŽ€

#include <sys/mman.h>

int posix_typed_mem_get_info(int fildes,
    struct posix_typed_mem_info *info);

πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the vibe: posix_typed_mem_get_info() shall return, in the posix_tmi_length field of the posix_typed_mem_info structure pointed to by info, the maximum length which may be successfully allocated by the typed memory object designated by fildes. πŸ’…

That maximum length shall take into account the flag POSIX_TYPED_MEM_ALLOCATE or POSIX_TYPED_MEM_ALLOCATE_CONTIG specified when the typed memory object represented by fildes was opened. And the maximum length is dynamic, so the value returned is valid only while the current mapping of the corresponding typed memory pool remains unchanged. it's giving "moving target" fr fr.

If fildes represents a typed memory object opened with neither the POSIX_TYPED_MEM_ALLOCATE flag nor the POSIX_TYPED_MEM_ALLOCATE_CONTIG flag specified, then the returned value of info->posix_tmi_length is unspecified. 😭

The posix_typed_mem_get_info() function may return additional implementation-defined information in other fields of the posix_typed_mem_info structure pointed to by info. so like, there might be bonus content in there, iykyk.

🚨 okay this one matters: if the memory object specified by fildes is not a typed memory object, then the behavior of this function is undefined. not "a little weird", not "probably fine" β€” undefined. do not do this.

🌈 RETURN VALUE 🌈

Upon successful completion, posix_typed_mem_get_info() shall return zero. 🫢 Otherwise, the corresponding error status value shall be returned. that's it, that's the deal.


πŸ’€ ERRORS πŸ’€

The posix_typed_mem_get_info() function shall fail if:

  • EBADF β€” The fildes argument is not a valid open file descriptor. bestie that fd is not real. πŸ’€
  • ENODEV β€” The fildes argument is not connected to a memory object supported by this function. it's connected to something, just not the something we do here.

Also, important: this function shall not return an error code of [EINTR]. so don't go checking for it, it's not coming. ✨

The following sections are informative. (translation: the plot-relevant stuff is done, but keep scrolling, there's lore πŸ‘€)


πŸ™ˆ EXAMPLES πŸ™ˆ

None. literally none. the author said "you got this, figure it out" πŸ’…


🌸 APPLICATION USAGE 🌸

None. same energy as above, we're keeping it minimal.


🧚 RATIONALE 🧚

okay so why does this function even exist? buckle up.

An application that needs to allocate a block of typed memory with length dependent upon the amount of memory currently available must either query the typed memory object to obtain the amount available, or repeatedly invoke mmap() attempting to guess an appropriate length. And like β€” the guessing method? that's existing practice with malloc(), sure, but it is awkward and imprecise. not the serve we're going for.

The posix_typed_mem_get_info() function lets an application immediately determine available memory. icon behavior. This is particularly important for typed memory objects that may in some cases be scarce resources. πŸŽ€

⚠️ heads up: when a typed memory pool is a shared resource, some form of mutual-exclusion or synchronization may be required while typed memory is being queried and allocated β€” to prevent race conditions. protect your peace AND your shared pool, bestie.

Now, why not just use fstat()? The existing fstat() function is not suitable for this purpose. We realize that implementations may wish to provide other attributes of typed memory objects (for example, alignment requirements, page size, and so on). But the fstat() function returns a structure which is not extensible and, furthermore, contains substantial information that is inappropriate for typed memory objects. so like, wrong tool, wrong structure, wrong vibe. periodt.


⭐ FUTURE DIRECTIONS ⭐

None. the future is wide open and honestly, unbothered. ✨


πŸ‘‘ SEE ALSO πŸ‘‘

  • fstat()
  • mmap()
  • posix_typed_mem_open()

The Base Definitions volume of POSIX.1‐2017, <sys_mman.h>


Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. πŸ“

In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. (so if they disagree, the original wins, no debate.) The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .


and that's the whole page, bestie!! πŸ’– this little masterpiece was brought to you by IEEE/The Open Group, 2017 edition, filed under POSIX_T...ET_INFO(3POSIX) in the POSIX Programmer's Manual. slay, go query some typed memory, and hydrate. πŸ¦‹πŸŒΈπŸ«Ά