From 45435cc7e158eb4a604bc541575799ee603b14db Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 30 Dec 2015 02:15:02 +0100 Subject: add reopen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- include/fcntl.h | 47 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) (limited to 'include/fcntl.h') diff --git a/include/fcntl.h b/include/fcntl.h index 1c13b8d..422d408 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -52,10 +52,49 @@ int creat(const char*, mode_t) __deprecated("Use 'open' instead."); - +#if defined(__SLIBC_SOURCE) +/** + * Reopen a file via its file descriptor. The old file descriptor + * is closed and replace with the new open file descriptor. + * + * This function call is different from the `dup` function-family + * in two ways: (1) you can select news flags, for example, if + * `fd` was read-only, the new file descriptor can be write-only, + * and (2) the file descriptor is not duplicated, the file is + * reopened. + * + * This function is useful if you want to reopen a file you do + * now know the pathname, you do not want to create a new string + * with the pathname, or if the the file no longer has a pathname + * because it has been unlinked. + * + * Because the file is reopened, the file position is reset and + * is not shared with any duplicates of `fd`, unlike a call to + * dup(3). it is visible to the filesystem as a new open file + * descriptor and is distinguished from the duplocates of `fd`, + * and all file locks associated with `fd` are lost, except for + * on the duplicates of `fd`, which means that you can create + * new locks without removing locks from the duplicates of `fd`. + * + * This is a slibc extension. + * + * @etymology (Reopen) file! + * + * @param fd The file descriptor. + * @param oflag How the file shall be opened, see open(3). + * `O_CREAT` is not allowed. + * @return Zero on success, -1 on error. + * + * @throws EINVAL `oflag` contains `O_CREAT`. + * @throws EINVAL `fd` is negative. + * @throws Any error specified for open(3). + * @throws Any error specified for dup2(3). + * + * @since Always. + */ +int reopen(int, int); #endif -/* - TODO int reopen(int fd, int oflag); 0, on success, -1 on error -*/ + +#endif -- cgit v1.2.3-70-g09d2