In the C and C++ programming languages, unistd.h is the name of the header file that provides access to the POSIX operating system API.[1] It is defined by the POSIX.1 standard, the base of the Single Unix Specification, and should therefore be available in any POSIX-compliant operating system and compiler. For instance, this includes Unix and Unix-like operating systems, such as GNU variants, distributions of Linux and BSD, and macOS, and compilers such as GCC and LLVM.

On Unix-like systems, the interface defined by unistd.h is typically made up largely of system call wrapper functions such as fork, pipe and I/O primitives (read, write, close, etc.).

Unix compatibility layers such as Cygwin and MinGW also provide their own versions of unistd.h. In fact, those systems provide it along with the translation libraries that implement its functions in terms of win32 functions. E.g. In Cygwin, a header file can be found in /usr/include that sub-includes a file of the same name in /usr/include/sys. Not everything is defined in there but some definitions are done by references to the GNU C standard library headers (like stddef.h) which provide the type size_t and many more. Thus, unistd.h is only a generically defined adaptive layer that might be based upon already existing system and compiler specific definitions. This has the general advantage of not having a possibly concurrent set of header file defined, but one that is built upon the same root which, for this reason, will raise much fewer concerns in combined usage cases.

Overview of functions

edit
Function Description
crypt password and data encryption
encrypt encrypt 64-byte messages
gethostid get the unique identifier of the current host
gethostname get hostname
getopt parse command-line options
swab swap adjacent bytes
sysconf get configuration at run time
Signals alarm schedule an alarm signal
pause wait for signal
Filesystem access
faccessat
faccessat2
check user's permissions for a file or whether it exists
chdir
fchdir
change working directory
chown
fchown
lchown
fchownat
change owner and group of a file
close close a file descriptor
dup
dup2
duplicate a file descriptor
fsync
fdatasync
synchronize a file's in-core state with storage device
fpathconf
pathconf
get configuration values for files
ftruncate
truncate
truncate a file to a specified length
getcwd
getwd
get_current_dir_name
get current working directory
isatty test whether a file descriptor refers to a terminal
link
linkat
make a new name for a file
lockf apply, test or remove a POSIX lock on an open file
lseek reposition read/write file offset
pipe
pipe2
create pipe
pread
pwrite
read from or write to a file descriptor at a given offset
read read from a file descriptor
readlink
readlinkat
read value of a symbolic link
rmdir delete a directory
symlink
symlinkat
make a new name for a file
sync
syncfs
commit filesystem caches to disk
ttyname
ttyname_r
return name of a terminal
unlink
unlinkat
delete a name and possibly the file it refers to
write write to a file descriptor
Process _exit terminate the calling process
execl
execlp
execle
execv
execvp
execvpe
execute a file
fexecve execute program specified via file descriptor
fork create a new process
setpgid
getpgid
setpgrp
getpgrp
set/get process group
getpid
getppid
get process identification
getsid get session ID
nice change process priority
setsid creates a session and sets the process group ID
sleep sleep for a specified number of seconds
tcgetpgrp
tcsetpgrp
get and set terminal foreground process group
User/Group getgid
getegid
get group identity
getuid
geteuid
get user identity
getgroups get list of supplementary group IDs
getlogin
getlogin_r
get username
seteuid
setegid
set effective user or group ID
setgid set group identity
setreuid
setregid
set real and/or effective user or group ID
setuid set user identity

References

edit
  1. ^ "unistd.h(0P)". POSIX Programmer's Manual. IEEE/The Open Group. 2017. Retrieved 9 February 2024.
edit