.\" Copyright (c) 1980, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)xstr.1 8.2 (Berkeley) 12/30/93 .\" %FreeBSD: src/usr.bin/xstr/xstr.1,v 1.9 2003/06/09 19:35:56 charnier Exp % .\" $FreeBSD$ .\" .Dd December 30, 1993 .Dt XSTR 1 .Os .Sh 名称 .Nm xstr .Nd 共有文字列を実現するために C 言語プログラムから文字列を抽出する .Sh 書式 .Nm .Op Fl c .Op Fl .Op Fl v .Op Ar file .Sh 解説 .Nm ユーティリティは、 巨大なプログラムの文字列部分を保持するデータベースファイル .Pa strings をメンテナンスします。プログラム中の文字列は共通文字列 エリアへの参照に置換されます。これにより、共有文字列定数が実現できます。 これは特に read-only な文字列に有効です。 .Pp オプションは、以下のものが利用可能です: .Bl -tag -width indent .It Fl 標準入力からソースを読み込みます。 .It Fl c 指定された C 言語ソースまたは標準入力から文字列を抽出し、 文字列を (&xstr[number]) 形式に変換し、適当な number を割り当てます。 適切な xstr の宣言がファイルの先頭に挿入されます。変換した C 言語ソース はファイル .Pa x.c に出力されます。文字列は文字列データベースファイル .Pa strings に格納されます。 すでに同じ文字列がデータベース中に存在している場合、 および既に存在する文字列のサフィックスの場合、 データベースは変更されません。 .It Fl v 冗長モード。 .El .Pp プログラムの全ソースファイルをコンパイルした後、 共通文字列領域を宣言するファイル .Pa xs.c を、以下のようにコマンドを実行して作成できます。 .Bd -literal -offset indent xstr .Ed .Pp このあとでファイル .Pa xs.c をコンパイルし、他のオブジェクトファイルとリンク します。 .Pa xs.c 内の文字列配列を read-only にできるならば、必要な領域とスワップ によるオーバヘッドを少なくすることができます。 .Pp .Nm はまた、1 つのファイルにのみ適用することもできます。次のコマンド .Bd -literal -offset indent xstr name .Ed .Pp によって、同じディレクトリ内のファイル .Pa strings を変更したり、参照することなく、 .Pa x.c と .Pa xs.c を 作成します。 .Pp C 言語プリプロセッサのあとで .Nm を実行するのが便利な場合、あるいはそうすることが必要な場合があります。 マクロによって文字列が生成される時などがそうです。 このときは以下のようなコマンド列を実行します。 .Pp .Bd -literal -offset indent -compact cc \-E name.c | xstr \-c \- cc \-c x.c mv x.o name.o .Ed .Pp .Nm ユーティリティは、新しい文字列を追加する必要がないかぎり、ファイル .Pa strings を更新しません。このため、 .Xr make 1 が不必要に .Pa xs.o を作り直すことをなくすことができます。 .Sh 関連ファイル .Bl -tag -width /tmp/xsxx* -compact .It Pa strings 文字列データベース .It Pa x.c 変換後のソースファイル .It Pa xs.c 配列 `xstr' を定義した C ソースコード .It Pa /tmp/xs* 中間ファイル .El .Sh 関連項目 .Xr mkstr 1 .Sh バグ ある文字列が他の文字列のサフィックスであり、かつ短いほうの文字列のほうが先に .Nm によって処理されたなら、 たとえ、長いほうの文字列のみを格納すればよい場合にも、 両方の文字列がデータベース strings に格納されます。 .Sh 歴史 .Nm は .Bx 3.0 で追加されました。