import "archive/tar"
tarアーカイブへのアクセスを実装しています。GNUやBSDを含むほとんどのバリエーションをカバーすることを目指しています。
リファレンス:
http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5
http://www.gnu.org/software/tar/manual/html_node/Standard.html
パッケージファイル
common.go reader.go writer.go
定数
const (
// Types
TypeReg = '0';
TypeRegA = '\x00';
TypeLink = '1';
TypeSymlink = '2';
TypeChar = '3';
TypeBlock = '4';
TypeDir = '5';
TypeFifo = '6';
TypeCont = '7';
TypeXHeader = 'x';
TypeXGlobalHeader = 'g';
)
変数
var (
ErrWriteTooLong = os.NewError("write too long");
ErrFieldTooLong = os.NewError("header field too long");
)
var (
HeaderError os.Error = os.ErrorString("invalid tar header");
)
Header型
tarアーカイブ内の単一ヘッダーを表します。いくつかのフィールドは使われないかもしれません。
type Header struct {
Name string;
Mode int64;
Uid int64;
Gid int64;
Size int64;
Mtime int64;
Typeflag byte;
Linkname string;
Uname string;
Gname string;
Devmajor int64;
Devminor int64;
Atime int64;
Ctime int64;
}
Reader型
tarアーカイブ内へのシーケンシャルアクセスを提供します。tarアーカイブは一連のファイルにて構成されています。Nextメソッドでアーカイブ内の次ファイル(先頭も含む)へ移動します。また、この型はファイルデータへアクセスするio.Readerとして扱うことができます。
例:
tr := tar.NewReader(r);
for {
hdr, err := tr.Next();
if err != nil {
// handle error
}
if hdr == nil {
// end of tar archive
break
}
io.Copy(data, tr);
}
type Reader struct {
// contains unexported fields
}
NewReader関数
func NewReader(r io.Reader) *Reader
rから読み込みを行う新しいReaderを作成します。
(*Reader) Next関数
func (tr *Reader) Next() (*Header, os.Error)
Nextはtarアーカイブ内の次のエントリへ移動します。
(*Reader) Read関数
func (tr *Reader) Read(b []uint8) (n int, err os.Error)
Readはtarアーカイブ内のカレントエントリより読み込みを行います。エントリの最後に達した場合は0とnilを返すので、Nextを呼び出して次のエントリへ移動してください。
Writer型
POSIX.1 tarアーカイブ形式のシーケンシャルな書き込みを提供します。tarアーカイブは一連のファイルにて構成されています。
新規ファイルを作成するには、まずWriteHeaderを呼び出したあと、Writeを呼び出してファイルデータを書き込みます。書き込み可能なサイズはhdr.Sizeに指定したバイト数以下です。
例:
tw := tar.NewWriter(w);
hdr := new(Header);
hdr.Size = length of data in bytes;
// populate other hdr fields as desired
if err := tw.WriteHeader(hdr); err != nil {
// handle error
}
io.Copy(tw, data);
tw.Close();
type Writer struct {
// contains unexported fields
}
NewWriter関数
func NewWriter(w io.Writer) *Writer
wに書き込みを行う新しいWriterを作成します。
(*Writer) Close関数
func (tw *Writer) Close() os.Error
(*Writer) Flush関数
func (tw *Writer) Flush() os.Error
Flushはカレントファイルの書き込みを終了します。(オプション)
(*Writer) Write関数
func (tw *Writer) Write(b []uint8) (n int, err os.Error)
Writeはtarアーカイブ内のカレントエントリに書き込みを行います。WriteHeader呼び出し後にhdr.Sizeに指定しているバイト数以上の書き込みを行った場合、ErrWriteTooLongエラーを返します。
(*Writer) WriteHeader関数
func (tw *Writer) WriteHeader(hdr *Header) os.Error
WriteHeaderはhdrを書き込み、出力ファイルの準備を行います。最初のヘッダーではない場合、WriteHeaderはFlushを呼び出します。
Trackback URL
Leave a comment
Comments