Betriebssystem: Debian 9 (Linux 4.9)
Compiler: GCC 8.2
Aktuell schließe ich ein <stddef.h>
(wo size_t
definiert ist) und <stdint.h>
(wo die meisten ganzzahligen Typen definiert sind), aber ich habe immer noch keine ssize_t
.
Wo ist es definiert?
ssize_t
ist darin definiert sys/types.h
.
Pro die POSIX-Dokumentation:
NAME
sys/types.h – Datentypen
ZUSAMMENFASSUNG
#include <sys/types.h>
BEZEICHNUNG
Der Header muss mindestens die folgenden Typen definieren:
…
ssize_t
Wird für eine Anzahl von Bytes oder eine Fehleranzeige verwendet.
Seit Version 5.9 dokumentieren die Man-Pages von Linux Systemdatentypen, sodass Sie diese Informationen einfach und zentralisiert finden können.
Tipp einfach man ssize_t
:
ssize_t(3type) Linux Programmer’s Manual ssize_t(3type)
NAME
ssize_t - count of bytes or an error indication
LIBRARY
Standard C library (libc)
SYNOPSIS
#include <sys/types.h>
typedef /* ... */ ssize_t;
DESCRIPTION
Used for a count of bytes or an error indication. Ac‐
cording to POSIX, it shall be a signed integer type capa‐
ble of storing values at least in the range [-1,
SSIZE_MAX], and the implementation 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 functions, which is z; resulting commonly in
%zd or %zi for printing ssize_t values. Although z works
for ssize_t on most implementations, portable POSIX pro‐
grams should avoid using it—for example, by converting
the value to intmax_t and using its length modifier (j).
VERSIONS
<aio.h>, <mqueue.h>, and <sys/socket.h> define ssize_t
since POSIX.1‐2008.
CONFORMING TO
POSIX.1‐2001 and later.
NOTES
The following headers also provide this type: <aio.h>,
<monetary.h>, <mqueue.h>, <stdio.h>, <sys/msg.h>,
<sys/socket.h>, <sys/uio.h>, and <unistd.h>.
SEE ALSO
read(2), readlink(2), readv(2), recv(2), send(2),
write(2), ptrdiff_t(3type), size_t(3type)
Linux 2022‐06‐17 ssize_t(3type)
Wenn Sie nur wollen ssize_t
sollten Sie einschließen <sys/types.h>
das ist der kanonische Header und wahrscheinlich der leichteste, der bereitgestellt wird ssize_t
. Sie wird jedoch von jedem der dokumentierten Header bereitgestellt. Wenn Sie also zufällig auch eine Definition in einem dieser anderen Header benötigen, können Sie nur diesen anderen Header einschließen.
#include
– Bruno
15. März 2019 um 20:38 Uhr
#include <unistd.h>
oder#include <sys/types.h>
– Bruno
15. März 2019 um 20:44 Uhr
Posix
<sys/types.h>
– pmg
15. März 2019 um 20:48 Uhr
+1 für das Stellen einer grundlegenden Frage, die anscheinend noch nie zuvor gestellt wurde. Oder ich konnte es mit zwei Suchmaschinen nicht finden.
– jww
16. März 2019 um 0:36 Uhr
Beachten Sie, dass auch wenn Sie enthalten
<sys/types.h>
ist der Typ möglicherweise nicht definiert, wenn Sie einen strengen C-Standard mit GCC angeben (-std=c99
) statt der GNU-Variante (-std=gnu99
). Sie müssen dann die POSIX-Erweiterungen aktivieren, wahrscheinlich mit#define _XOPEN_SOURCE 700
(Die Nummer ist leichter zu merken als#define _POSIX_C_SOURCE 200809L
was eine gültige Alternative ist; es gibt subtile Unterschiede zwischen X/Open und POSIX, aber sie sind minimal und selten relevant). Das#define
muss erscheinen, bevor ein Systemheader eingefügt wird. Es könnte auf der Befehlszeile als angegeben werden-D_XOPEN_SOURCE=700
.– Jonathan Leffler
23. Januar 2021 um 12:34 Uhr