日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
STRLCPY(3) FreeBSD ライブラリ関数マニュアル STRLCPY(3) 名称 strlcpy, strlcat -- サイズ限界のある文字列のコピーと連結 ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <string.h> size_t strlcpy(char * restrict dst, const char * restrict src, size_t dstsize); size_t strlcat(char * restrict dst, const char * restrict src, size_t dstsize); 解説 strlcpy() と strlcat() 関数は、snprintf(3) と同じ入力パラメータと出力結果 がある文字列をコピーし、連結します。それらは、容易に乱用される傾向がある 関数 strncpy(3) と strncat(3) を置き換え、より安全で、より一貫性があり、 エラーがより少なくなるように設計されています。 strlcpy() と strlcat() は、余地があるなら、宛先のバッファとヌル (NUL) 文 字で終了していることを保証するために十分なサイズを取ります。ヌル文字の余 地が dstsize に含まれるべきであることに注意してください。 strlcpy() は、文字列 src から dst まで dstsize -1 文字までコピーします。 dstsize が 0 でないなら、結果は、ヌル文字で終了します。 strlcat() は、dst の終りに文字列 src を追加します。それは、多くても dstsize - strlen(dst) - 1 文字を追加します。次に、dstsize が 0 でないか、 オリジナルの dst 文字列が dstsize より長くなかったなら、ヌル文字で終了し ます、(実際に、これは、dstsize が正しくないか、または dst が適切な文字列 ではないことを意味するので、起こるべきではありません)。 src と dst 文字列がオーバラップするなら、振る舞いは、不確定です。 戻り値 さらに、返り値のタイプ (size_t 対 int) とシグナルハンドラの安全性 (snprintf(3) は、いくつかのシステムで完全に安全ではありません) について文 句を言います、次の 2 つは、同等です: n = strlcpy(dst, src, len); n = snprintf(dst, len, "%s", src); snprintf(3) のように、strlcpy() と strlcat() 関数は、それらが作成しようと 試みる文字列の合計の長さを返します。strlcpy() に関して、src の長さを意味 します。strlcat() に関して、dst の初期値 + src の長さを意味します。 返り値が >= dstsize あるなら、出力文字列は、切り詰められました。これを扱 うことは、呼び出し側の責任です。 使用例 次のコードの破片は、単純な場合を説明しています: char *s, *p, buf[BUFSIZ]; ... (void)strlcpy(buf, s, sizeof(buf)); (void)strlcat(buf, p, sizeof(buf)); おそらく、パスネームを構築する間に切捨てを検出するために、次のようなもの が使用されるでしょう: char *dir, *file, pname[MAXPATHLEN]; ... if (strlcpy(pname, dir, sizeof(pname)) >= sizeof(pname)) goto toolong; if (strlcat(pname, file, sizeof(pname)) >= sizeof(pname)) goto toolong; 最初に、どのくらい文字をコピーしたか知っているので、追加の代わりにコピー を使用することによって少しスピードアップすることができます: char *dir, *file, pname[MAXPATHLEN]; size_t n; ... n = strlcpy(pname, dir, sizeof(pname)); if (n >= sizeof(pname)) goto toolong; if (strlcpy(pname + n, file, sizeof(pname) - n) >= sizeof(pname) - n) goto toolong; しかしながら、それらは、strlcpy() と strlcat() の全体の目的を駄目にするの で、そのような最適化の有効性を疑問に思うかもしれません。実は、このマニュ アルページの最初のバージョンは、それを誤解しました。 関連項目 snprintf(3), strncat(3), strncpy(3), wcslcpy(3) Todd C. Miller and Theo de Raadt, "strlcpy and strlcat -- Consistent, Safe, String Copy and Concatenation", Proceedings of the FREENIX Track: 1999 USENIX Annual Technical Conference, USENIX Association, June 6-11, 1999, http://www.usenix.org/publications/library/proceedings/usenix99/ full_papers/millert/millert.pdf. 歴史 strlcpy() と strlcat() 関数は、OpenBSD 2.4 と FreeBSD 3.3 ではじめて登場 しました。 FreeBSD 13.2 May 1, 2020 FreeBSD 13.2