XSTR(1)

名称
xstr - 共有文字列を実現するために C 言語プログラムから文字列を抽出する

書式
xstr [-c] [-] [-v] [file]

解説
xstr は、巨大なプログラムの文字列部分を保持するデータベースファイル strings をメンテナンスします。プログラム中の文字列は共通文字列 エリアへの参照に置換されます。これにより、共有文字列定数が実現できます。 これは特に read-only な文字列に有効です。

オプションは、以下のものが利用可能です:

-   xstr は標準入力からソースを読み込みます。

-c  xstr は、指定された C 言語ソースまたは標準入力から文字列を抽出し、 文字列を (&xstr[number]) 形式に変換し、適当な number を割り当てます。 適切な xstr の宣言がファイルの先頭に挿入されます。変換した C 言語ソース はファイル x.c に出力されます。文字列は文字列データベースファイル strings に格納されます。 すでに同じ文字列がデータベース中に存在している場合、 および既に存在する文字列のサフィックスの場合、 データベースは変更されません。

-v  冗長モード。

プログラムの全ソースファイルをコンパイルした後、 共通文字列領域を宣言するファイル xs.c を、以下のようにコマンドを実行して作成できます。

    xstr

このあとでファイル xs.c をコンパイルし、他のオブジェクトファイルとリンク します。 xs.c 内の文字列配列を read-only にできるならば、必要な領域とスワップ によるオーバヘッドを少なくすることができます。

xstr はまた、1 つのファイルにのみ適用することもできます。次のコマンド

    xstr name

によって、同じディレクトリ内のファイル strings を変更したり、参照することなく、 x.c と xs.c を 作成します。

C 言語プリプロセッサのあとで xstr を実行するのが便利な場合、あるいはそうすることが必要な場合があります。 マクロによって文字列が生成される時などがそうです。 このときは以下のようなコマンド列を実行します。

    cc -E name.c | xstr -c -
    cc -c x.c
    mv x.o name.o

xstr は新しい文字列を追加する必要がないかぎり、ファイル strings を更新しません。このため、 make(1) が不必要に xs.o を作り直すことをなくすことができます。

関連ファイル
strings
    文字列データベース
x.c 変換後のソースファイル
xs.c
    配列 `xstr' を定義した C ソースコード
/tmp/xs*
    中間ファイル

関連項目
mkstr(1)

バグ
ある文字列が他の文字列のサフィックスであり、かつ短いほうの文字列のほうが先に xstr によって処理されたなら、 たとえ、長いほうの文字列のみを格納すればよい場合にも、 両方の文字列がデータベース strings に格納されます。

歴史
xstr は 3.0BSD で追加されました。