Wo ist ssize_t in Linux definiert?

Lesezeit: 4 Minuten

Benutzer-Avatar
alex

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?

  • #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


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.

Benutzer-Avatar
alex

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_tsollten 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.

  • Ich bin auf Ubuntu 20.04. man ssize_t zeigt mir nur folgendes: No manual entry for ssize_t.

    – Gabriel Staples

    25. Mai 2021 um 7:30 Uhr

  • @GabrielStaples Ubuntu 20.04 hat man-pages-5.05nach dem, was ich in < gelesen habepkgs.org/search/?q=Manpages>. Sie können Ihre Version leicht überprüfen, indem Sie das KOLOPHON von lesen man intro (oder eine der Handbuchseiten, die von der man-pages project (die sich unter Ubuntu in Paketen befinden manpages und manpages-dev)).

    – alx

    25. Mai 2021 um 7:35 Uhr


  • Nachdem ich was nachgeschlagen habe Kolophon bedeutet, da dieses Wort zu groß für meinen Wortschatz ist, habe ich das gesucht man intro Seite und sehen Sie meine Version ganz unten. Vielen Dank. COLOPHON This page is part of release 5.05 of the Linux man-pages project. Sie haben also recht. Ubuntu 20.04 hat Manpages Version 5.05.

    – Gabriel Staples

    25. Mai 2021 um 7:40 Uhr


  • Wenn Sie daran interessiert sind, Ihre Handbuchseiten zu aktualisieren (was ein ziemlich sicherer und umkehrbarer Vorgang ist), ist es trivial, dies von der Quelle aus zu tun: git clone git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git && cd man-pages && make install. Du kannst make uninstall um die Installation rückgängig zu machen und zum Normalzustand zurückzukehren (Ihre System-Handbuchseiten werden nicht überschrieben, da es verwendet wird </usr/local/share/man/> für den Einbau). Folgen Sie einfach der README.

    – alx

    25. Mai 2021 um 7:44 Uhr


1334670cookie-checkWo ist ssize_t in Linux definiert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy