diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-03-10 12:26:31 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-07-08 14:08:13 -0300 |
commit | 286286283e9bdc7ef894306e2dbcf4c115b97ba2 (patch) | |
tree | 00fa61df0e6e6093c337bc59a6c5fdd914d9fe6f /manual/llio.texi | |
parent | ae8c243d2473bdfc3c0f9c6b46e6dffb5a28725c (diff) | |
download | glibc-286286283e9bdc7ef894306e2dbcf4c115b97ba2.tar.gz glibc-286286283e9bdc7ef894306e2dbcf4c115b97ba2.tar.xz glibc-286286283e9bdc7ef894306e2dbcf4c115b97ba2.zip |
linux: Add close_range
It was added on Linux 5.9 (278a5fbaed89) with CLOSE_RANGE_CLOEXEC added on 5.11 (582f1fb6b721f). Although FreeBSD has added the same syscall, this only adds the symbol on Linux ports. This syscall is required to provided a fail-safe way to implement the closefrom symbol (BZ #10353). Checked on x86_64-linux-gnu and i686-linux-gnu on kernel 5.11 and 4.15.
Diffstat (limited to 'manual/llio.texi')
-rw-r--r-- | manual/llio.texi | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/manual/llio.texi b/manual/llio.texi index eafc27120d..e21a71fdd0 100644 --- a/manual/llio.texi +++ b/manual/llio.texi @@ -284,6 +284,57 @@ of trying to close its underlying file descriptor with @code{close}. This flushes any buffered output and updates the stream object to indicate that it is closed. +@deftypefun int close_range (unsigned int @var{lowfd}, unsigned int @var{maxfd}, int @var{flags}) +@standards{Linux, unistd.h} +@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} +@c This is a syscall for Linux v5.9. There is no fallback emulation for +@c older kernels. + +The function @code{close_range} closes the file descriptor from @var{lowfd} +to @var{maxfd} (inclusive). This function is similar to call @code{close} in +specified file descriptor range depending on the @var{flags}. + +This is function is only supported on recent Linux versions and @theglibc{} +does not provide any fallback (the application will need to handle possible +@code{ENOSYS}). + +The @var{flags} add options on how the files are closes. Linux currently +supports: + +@vtable @code +@item CLOSE_RANGE_UNSHARE +Unshare the file descriptor table before closing file descriptors. + +@item CLOSE_RANGE_CLOEXEC +Set the @code{FD_CLOEXEC} bit instead of closing the file descriptor. +@end vtable + +The normal return value from @code{close_range} is @math{0}; a value +of @math{-1} is returned in case of failure. The following @code{errno} error +conditions are defined for this function: + +@table @code +@item EINVAL +The @var{lowfd} value is larger than @var{maxfd} or an unsupported @var{flags} +is used. + +@item ENOMEM +Either there is not enough memory for the operation, or the process is +out of address space. It can only happnes when @code{CLOSE_RANGE_UNSHARED} +flag is used. + +@item EMFILE +The process has too many files open and it can only happens when +@code{CLOSE_RANGE_UNSHARED} flag is used. +The maximum number of file descriptors is controlled by the +@code{RLIMIT_NOFILE} resource limit; @pxref{Limits on Resources}. + +@item ENOSYS +The kernel does not implement the required functionality. +@end table +@end deftypefun + + @node I/O Primitives @section Input and Output Primitives |