ssize_t
読み:エスサイズ・アンダースコア・ティー
外語:ssize_t

 C/C++などにおける変数型の一つ。UNIXで、「エラー」または「長さ」を格納するために使われる。
目次

書式
 #include <unistd.h>
 #include <sys/types.h>

定義

FreeBSD
 FreeBSDの場合、次のように定義されている。
 unistd.hやsys/types.h
 typedef __ssize_t ssize_t;
 machine/_types.h
 typedef int __int32_t;
 typedef __int32_t __ssize_t;
 32ビット版FreeBSDでは、間接的にintで定義されている。

Linuxユーザー空間
 x86用Linuxの場合、次のように定義されている。
 asm/posix_types_64.h
 typedef long __kernel_ssize_t;
 asm/posix_types_32.h
 typedef int __kernel_ssize_t;
 asm-generic/posix_types.h
 typedef int __kernel_ssize_t;
 typedef long __kernel_ssize_t;
 その後
 sys/types.h
 typedef __ssize_t ssize_t;
 環境に応じて、intまたはlongが間接的にtypedefされている。

Linuxカーネル
 x86の場合
 arch/x86/include/asm/posix_types_64.h
 typedef long __kernel_ssize_t;
 arch/x86/include/asm/posix_types_32.h
 typedef int __kernel_ssize_t;
 ARMの場合
 arch/arm/include/asm/posix_types.h
 typedef int __kernel_ssize_t;
 その後
 linux/types.h
 typedef __kernel_ssize_t ssize_t;
 環境に応じて、intまたはlongが間接的にtypedefされている。

特徴

用途
 UNIXのシステムコールで、返り値に長さ(0以上)またはエラー(-1)を返す場合に使われている。エラー時、実際のエラーの種類はerrnoに格納される。
 次のような関数がssize_t型で値を返す。
 基本的にサイズが負の数になることはなく、またエラーの場合も-1を返して実際のエラー番号はerrnoである。無駄が多く、あまり賢くない設計である。
 しかも、size_tと比較しても有効符号長が1ビット短くなるため、長さを表わすにも不利である。

サフィックス
 数値の型を表わすサフィックスは、特に定義されていない。

printf
 printfののフォーマット文字列では、C99以降では長さとしてzを使う(例えば%zd)。

再検索