X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=draft%2Fman3%2Fstrtok.3;h=a4589ab44443a5fa7f45e29d7a6a5a0f07c81475;hb=c1dfa2f6ab1bbed84992d3c59ee9925f4d453668;hp=420a3535cc737eae5ccceb6c46a9d80efda7c873;hpb=d64f6f809e331352f863bdb422001aaaaea4cbdd;p=linuxjm%2FLDP_man-pages.git diff --git a/draft/man3/strtok.3 b/draft/man3/strtok.3 index 420a3535..a4589ab4 100644 --- a/draft/man3/strtok.3 +++ b/draft/man3/strtok.3 @@ -1,6 +1,8 @@ -.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl) -.\" and Copyright (C) 2005 Michael Kerrisk (mtk.manpages@gmail.com) +.\" Copyright (C) 2005, 2013 Michael Kerrisk (mtk.manpages@gmail.com) +.\" a few fragments from an earlier (1996) version by +.\" Andries Brouwer (aeb@cwi.nl) remain. .\" +.\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. @@ -20,17 +22,19 @@ .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END .\" .\" Rewritten old page, 960210, aeb@cwi.nl .\" Updated, added strtok_r. 2000-02-13 Nicolás Lichtmaier .\" 2005-11-17, mtk: Substantial parts rewritten +.\" 2013-05-19, mtk: added much further detail on the operation of strtok() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* -.TH STRTOK 3 2010\-09\-27 GNU "Linux Programmer's Manual" +.TH STRTOK 3 2013\-05\-19 GNU "Linux Programmer's Manual" .SH 名前 strtok, strtok_r \- 文字列からトークンを取り出す .SH 書式 @@ -51,19 +55,35 @@ glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参 _XOPEN_SOURCE || _POSIX_SOURCE .ad b .SH 説明 -\fBstrtok\fP() 関数は文字列を解析してトークンに分割する。 \fBstrtok\fP() を最初に呼び出す際には、解析対象の文字列を \fIstr\fP -に 指定する。同じ文字列の解析を行うその後の呼び出しでは、 \fIstr\fP には NULL を指定する。 +\fBstrtok\fP() 関数は文字列を 0 個以上の空でないトークンの列に分割する。 \fBstrtok\fP() +を最初に呼び出す際には、解析対象の文字列を \fIstr\fP に 指定する。同じ文字列の解析を行うその後の呼び出しでは、 \fIstr\fP は NULL +にしなければならない。 -\fIdelim\fP 引き数には、解析する文字列をトークンに区切る文字集合を 指定する。同じ文字列を解析する一連の呼び出しにおいて、 \fIdelim\fP -に違う文字列を指定してもよい。 +\fIdelim\fP 引き数には、解析対象の文字列をトークンに区切るのに使用する +バイト集合を指定する。同じ文字列を解析する一連の呼び出しにおいて、 +\fIdelim\fP に違う文字列を指定してもよい。 -\fBstrtok\fP() のそれぞれの呼び出しでは、次のトークンを 格納した NULL 終端された文字列へのポインタが返される。 -この文字列には区切り文字は含まれない。 これ以上トークンが見つからなかった場合には、NULL が返される。 +\fBstrtok\fP() のそれぞれの呼び出しでは、次のトークンを格納した NULL 終端 +された文字列へのポインタが返される。この文字列には区切りバイトは含まれ +ない。これ以上トークンが見つからなかった場合には、NULL が返される。 -解析対象の文字列に2つ以上の区切り文字が連続している場合には、 一つの区切り文字とみなされる。 -文字列の先頭や末尾にある区切り文字は無視される。言い換えると、 \fBstrtok\fP() が返すトークンは常に空でない文字列となる。 +同じ文字列に対して操作を行う \fBstrtok\fP() を連続して呼び出す場合、 次のトークンを探し始める位置を決めるためのポインタが保持される。 最初の +\fBstrtok\fP の呼び出しでは、 このポインタは対象の文字列の最初のバイトにセットされる。 次のトークンの先頭は、 \fIstr\fP +内で次の区切りバイト以外のバイトを前方に検索して決定される。 区切りバイト以外のバイトが見つからなかった場合は、 トークンはこれ以上なく、 +\fBstrtok\fP() は NULL を返す (したがって、 空の文字列や区切りバイトだけを含む文字列の場合には、 最初の \fBstrtok\fP() +の呼び出しで NULL が返ることになる)。 -\fBstrtok_r\fP() 関数は \fBstrtok\fP() のリエントラント版である。 \fIsaveptr\fP 引き数は \fIchar *\fP +各トークンの末尾は、次の区切りバイトが見つかるか、終端の NULL バイト (\(aq\e0\(aq) +に達するまで文字列を前方に検索することで見つかる。 区切りバイトが見つかった場合には、 現在のトークンの終わりを示すために、 見つかった区切りバイトが +NULL バイトで上書きされ、 \fBstrtok\fP() はポインタを次のバイトに設定する。 +このポインタは、次のトークンを検索する際の開始点として使用される。 この場合、 \fBstrtok\fP() は見つかったトークンの先頭へのポインタを返す。 + +上記の説明の通り、 解析対象の文字列に 2 つ以上の区切りバイトが連続している場合には、 一つの区切りバイトとみなされ、 +文字列の先頭や末尾にある区切りバイトは無視される。 言い換えると、 \fBstrtok\fP() が返すトークンは必ず空でない文字列となる。 +したがって、例えば "\fIaaa;;bbb,\fP" という文字列が与えられたとすると、 区切り文字列 "\fI;,\fP" を指定した一連の +\fBstrtok\fP() の呼び出しでは、 "\fIaaa\fP" と \fIbbb\fP" が返り、その次に NULL ポインタが返る。 + +\fBstrtok_r\fP() 関数は \fBstrtok\fP() のリエントラント版である。 \fIsaveptr\fP 引き数は \fIchar\ *\fP 変数へのポインタであり、 同じ文字列の解析を行う \fBstrtok_r\fP() の呼び出し間で処理状況を保存するために \fBstrtok_r\fP() 内部で使用される。 @@ -74,6 +94,11 @@ _XOPEN_SOURCE || _POSIX_SOURCE \fBstrtok_r\fP() の呼び出し時に異なる \fIsaveptr\fP 引き数を指定することで、 異なる文字列の解析を同時に行うことができる。 .SH 返り値 \fBstrtok\fP() と \fBstrtok_r\fP() は次のトークンへのポインタか、 トークンがなければ NULL を返す。 +.SH 属性 +.SS "マルチスレッディング (pthreads(7) 参照)" +The \fBstrtok\fP() 関数はスレッドセーフではない。 +.LP +\fBstrtok_r\fP() 関数はスレッドセーフである。 .SH 準拠 .TP \fBstrtok\fP() @@ -88,14 +113,17 @@ POSIX.1\-2001. .IP * これらの関数は const な文字列では使えない。 .IP * -区切り文字自体は失われてしまう。 +区切りバイト自体は失われてしまう。 .IP * \fBstrtok\fP() 関数は文字列の解析に静的バッファを用いるので、スレッドセーフでない。 これが問題になる場合は \fBstrtok_r\fP() を用いること。 .SH 例 -以下のプログラムは、 \fBstrtok_r\fP() を利用するループを入れ子にして使用し、 文字列を2階層のトークンに分割するものである。 -1番目のコマンドライン引き数には、解析対象の文字列を指定する。 2番目の引き数には、文字列を「大きな」トークンに分割するために -使用する区切り文字を指定する。 3番目の引き数には、「大きな」トークンを細かく分割するために 使用する区切り文字を指定する。 +以下のプログラムは、 \fBstrtok_r\fP() を利用するループを入れ子にして使用し、 +文字列を 2 階層のトークンに分割するものである。 1番目のコマンドライン +引き数には、解析対象の文字列を指定する。 2 番目の引き数には、文字列を +「大きな」トークンに分割するために 使用する区切りバイトを指定する。 +3 番目の引き数には、「大きな」トークンを細かく分割するために使用する +区切りバイトを指定する。 .PP このプログラムの出力例を以下に示す。 .PP @@ -155,6 +183,6 @@ main(int argc, char *argv[]) \fBindex\fP(3), \fBmemchr\fP(3), \fBrindex\fP(3), \fBstrchr\fP(3), \fBstring\fP(3), \fBstrpbrk\fP(3), \fBstrsep\fP(3), \fBstrspn\fP(3), \fBstrstr\fP(3), \fBwcstok\fP(3) .SH この文書について -この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。