memcmp -
メモリー領域を比較する
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
memcmp()
関数は、メモリー領域
s1 と
s2 の最初の
n
バイトを比較する
(各バイトは
unsigned char
として解釈される)。
memcmp() 関数は、
s1
の最初の
n バイトが
s2 の最初の
n
バイトよりも
小さいか、同じか、あるいは大きいかによってそれぞれ、負の整数、0、
正の整数を返す。
0 でない値の場合、
s1
と
s2
で値が異なった最初のバイトの値の差で符号は決定される
(バイトは
unsigned char
で解釈される)。
n が 0
の場合、返り値は 0
となる。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
memcmp() |
Thread safety |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
暗号化された秘密などセキュリティ的に重要なデータの比較には
memcmp()
を使用しないこと。
必要な CPU
時間は値が等しいバイトの量に依存するからである。
その代わり、
一定時間で比較を実行する関数が必要である。
いくつかのオペレーティングシステムでは
(例えば NetBSD の
consttime_memequal()
などの)
関数が提供されているが、
このような関数は POSIX
では規定されていない。
Linux では、
このような関数自体を実装する必要があるかもしれない。
bcmp(3),
bstring(3),
strcasecmp(3),
strcmp(3),
strcoll(3),
strncasecmp(3),
strncmp(3),
wmemcmp(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。