.\" Copyright (c) 1990, 1991, 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. .\" .\" @(#)ar.5.5 8.1 (Berkeley) 6/9/93 .\" %FreeBSD: src/usr.bin/ar/ar.5,v 1.5.2.1 2000/12/08 15:13:18 ru Exp % .\" jpman %Id: ar.5,v 1.3 1998/06/15 05:38:19 kuma Stab % .\" .\" WORD: archive アーカイブ .\" .Dd June 9, 1993 .Dt AR 5 .Os .Sh 名称 .Nm ar .Nd アーカイブ (ライブラリ) ファイルフォーマット .Sh 書式 .Fd #include .Sh 解説 アーカイブコマンド .Nm は複数のファイルをひとつにまとめます。 アーカイブは主にリンクエディタ .Xr ld 1 を使ってロードするための オブジェクトファイルのライブラリとして使用します。 .Pp .Nm によって作成されたファイルは ``マジック'' ストリング "!\en" で 始まっています。 アーカイブの残りはオブジェクトからなり、その各々はファイルのヘッダと ファイル名 (オプション) とファイルの中身から構成されます。 ヘッダは異なるマシンアーキテクチャ間で互換性のあるもので、 ファイルの内容が印字可能なものであれば アーカイブそのものも印字可能となります。 .Pp ヘッダは、可変長の .Tn ASCII のフィールド 6 つとそれに続く2 文字の終端から構成されます。 フィールドはオブジェクトの名前 (16 文字)、 ファイルの最終更新時間 (12 文字)、 ユーザとグループ ID (各々 6 文字)、 ファイルモード (8文字)、 それにファイルサイズ (10 文字) です。 全ての数字フィールドは 10 進数ですが、ファイルモードだけは 8 進数です。 .Pp 更新時間はファイルの .Fa st_mtime フィールドです。すなわち 基準時点 (epoch) からの時間 .Dv CUT 秒です。 ユーザ ID とグループ ID はファイルの .Fa st_uid と .Fa st_gid フィールドです。 ファイルモードはファイルの .Fa st_mode フィールドです。 ファイルサイズはファイルの .Fa st_size フィールドです。 最後の 2 バイトは文字列 "\`\en" となります。 .Pp 名前のフィールドに限りあふれることが考えられるため、以下のよ うに対応しています。 もしファイル名の長さが 16 文字を超えるかスペースを含む場合は、 名前のフィールドには文字列 "#1/" に続いてその名前の .Tn ASCII での長さが書き込まれます。 ファイルサイズ (アーカイブヘッダに書き込まれているもの) には その名前の長さが加算されます。 そして名前はアーカイブヘッダの直後に書かれます。 .Pp これらのフィールドにおいて使用されていない部分には 空白文字が書き込まれます。 もしフィールドにその最長の文字数が書き込まれていると、 フィールドの間の区切りはないことになります。 .Pp アーカイブ中のオブジェクトは常に偶数バイトの長さとなります。 ファイルの長さが奇数バイトである場合は 改行 (``\en'') 文字でパディングされます。 その場合、ヘッダ中のファイルサイズにはパディングの分は反映されません。 .Sh 関連項目 .Xr ar 1 , .Xr stat 2 .Sh 歴史 これまでに少なくとも 4 つの .Nm フォーマットがありました。 最初のものは先頭の ``マジック'' ナンバー 0177555 (int 型で書かれていた) で示されていました。 これらのアーカイブはほとんどが 16 ビットマシン上で作られたものであり、 ヘッダは 5 つのフィールドから構成されていました。 ヘッダのフィールドにはオブジェクト名 (8 文字)、 ファイルの最終更新時間 (long 型)、 ユーザ ID (char 型)、 ファイルモード (char 型)、 そしてファイルサイズ (符号なし int 型) がありました。 ファイルはバイト数で偶数長となるようにパディングされていました。 .Pp 2 つ目のものは先頭の ``マジック'' ナンバー 0177545 (int 型で書かれていた) で示されていました。 これらのアーカイブは 16 もしくは 32 ビットマシンで作られたものであり、 ヘッダは 6 つのフィールドから構成されていました。 フィールドにはオブジェクト名 (14 文字)、 ファイルの最終更新時間 (long 型)、 ユーザおよびグループ ID (各々 char 型)、 ファイルモード (int 型)、 そしてファイルサイズ (long 型) がありました。 ファイルはバイト数で偶数長となるようにパディングされていました。 .\" For more information on converting from this format see .\" .Xr arcv 8 . .Pp 現在のアーカイブフォーマット (長い名前とスペースを含む名前をサポートしていないもの) は .Bx 4.0 で導入されました。 ヘッダは現在のフォーマットと同じですが、 16 文字以上の名前は切り捨てられ、 スペースを含む名前 (および名前の末尾にスペースがつくもの) はサポートされていません。 これらの理由により、このフォーマットに前述の拡張がなされました。 現在のこのフォーマットは .Bx 4.4 で最初に出現しました。 .Sh 互換性 現在アーカイブフォーマットは標準では規定されていません。 .At V では、昔から上述のいずれとも異なるフォーマットの アーカイブで配布されています。