OS: Debian 9 (Linux 4.9)
Compiler: GCC 8.2
Currently I am including <stddef.h>
(where size_t
is defined) and <stdint.h>
(where most integral types are defined), but I still don't have ssize_t
.
Where is it defined?
The datatype size_t is unsigned integral type. It represents the size of any object in bytes and returned by sizeof operator. It is used for array indexing and counting.
In short, ssize_t is the same as size_t , but is a signed type - read ssize_t as “signed size_t ”. ssize_t is able to represent the number -1 , which is returned by several system calls and library functions as a way to indicate error. For example, the read and write system calls: #include <sys/types.
off_t is normally defined as a signed, 32-bit integer. In the programming environment which enables large files, off_t is defined to be a signed, 64-bit integer. offset_t. 64-bit file offset, measured in bytes from the beginning of a file or device.
ssize_t
is defined in sys/types.h
.
Per the POSIX documentation:
NAME
sys/types.h - data types
SYNOPSIS
#include <sys/types.h>
DESCRIPTION
The header shall define at least the following types:
...
ssize_t
Used for a count of bytes or an error indication.
Since version 5.9, the Linux man-pages document system data types, so that you can find this information easily in a centralized manner.
Just type man ssize_t
:
ssize_t
Include: <sys/types.h>. Alternatively, <aio.h>, <monetary.h>,
<mqueue.h>, <stdio.h>, <sys/msg.h>, <sys/socket.h>, <sys/uio.h>,
or <unistd.h>.
Used for a count of bytes or an error indication. According to
POSIX, it shall be a signed integer type capable of storing val-
ues at least in the range [-1, SSIZE_MAX], and the implementa-
tion shall support one or more programming environments where
the width of ssize_t is no greater than the width of the type
long.
Glibc and most other implementations provide a length modifier
for ssize_t for the printf(3) and the scanf(3) families of func-
tions, which is z; resulting commonly in %zd or %zi for printing
ssize_t values. Although z works for ssize_t on most implemen-
tations, portable POSIX programs should avoid using it--for ex-
ample, by converting the value to intmax_t and using its length
modifier (j).
Conforming to: POSIX.1-2001 and later.
See also: read(2), readlink(2), readv(2), recv(2), send(2),
write(2)
See also the ptrdiff_t and size_t types in this page.
And later in the NOTES section of that same page:
NOTES
[...]
Conventions used in this page
[...]
In "Include", we first note the "primary" header(s) that define the
type according to either the C or POSIX.1 standards. Under "Alterna-
tively", we note additional headers that the standards specify shall
define the type.
If you just want ssize_t
, you should include <sys/types.h>
, which is its canonical header, and probably the lightest one that provides ssize_t
. However, it is provided by any of the headers documented, so if you happen to also need a definition in one of those other headers, you can include that other header only.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With