sopenfd()

Updated: April 19, 2023

Open for shared access a file associated with a given descriptor

Synopsis:

#include <unistd.h>

int sopenfd( int fd,
             int oflag,
             int sflag );

Arguments:

fd
A file descriptor associated with the file that you want to open.
oflag
How you want to open the file; a combination of the following bits:
  • O_RDONLY — permit the file to be only read.
  • O_WRONLY — permit the file to be only written.
  • O_RDWR — permit the file to be both read and written.
  • O_APPEND — cause each record that's written to be written at the end of the file.
  • O_CLOEXEC — close the file descriptor if the program calls one of the exec*(), posix_spawn*(), or spawn*() functions.
  • O_LARGEFILE — allow the file offset to be 64 bits long.
  • O_TRUNC — truncate the file to contain no data.
sflag
How you want the file to be shared; a combination of the following bits:
  • SH_COMPAT — this flag is ignored in the QNX implementation.
  • SH_DENYRW — prevent read or write access to the file.
  • SH_DENYWR — prevent write access to the file.
  • SH_DENYRD — prevent read access to the file.
  • SH_DENYNO — permit both read and write access to the file.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The sopenfd() function opens for shared access the file associated with the file descriptor, fd. The access mode specified in oflag must be equal to or more restrictive than the access mode of the source fd.

Note that:

openfd( fd, oflag );

is the same as:

sopenfd( fd, oflag, SH_DENYNO );

Returns:

The file descriptor, or -1 if an error occurs (errno is set).

Errors:

EBADF
Invalid file descriptor fd.
EACCES
The access mode specified in oflag isn't equal to or more restrictive than the access mode of the source fd.
EBUSY
Sharing mode (sflag) was denied due to a conflicting open.

Classification:

Unix

Safety:  
Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes