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")
ErrWriteAfterClose = os.NewError("write after close")
)
var (
HeaderError os.Error = os.ErrorString("invalid tar header")
)
Header型
tarアーカイブ内の単一ヘッダを表します。いくつかのフィールドは使われないかもしれません。
type Header struct {
Name string
Mode int64
Uid int
Gid int
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
NewReaderは、rから読み込みを行う新しいReaderを作成します。
(*Reader) Next関数
func (tr *Reader) Next() (*Header, os.Error)
Nextは、tarアーカイブ内の次のエントリへ移動します。
(*Reader) Read関数
func (tr *Reader) Read(b []byte) (n int, err os.Error)
Readは、tarアーカイブ内のカレントエントリから読み込みを行います。エントリの最後に達したときに0, os.EOFを返すので、それまで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
NewWriterは、wに書き込みを行う新しいWriterを作成します。
(*Writer) Close関数
func (tw *Writer) Close() os.Error
Closeは、Writerがまだ書き込んでいないデータをフラッシュし、tarアーカイブをクローズします。
(*Writer) Flush関数
func (tw *Writer) Flush() os.Error
Flushは、カレントファイルの書き込みを終了します。(オプション)
(*Writer) Write関数
func (tw *Writer) Write(b []byte) (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を呼び出します。クローズ後に呼び出したときはErrWriteAfterCloseが返されます。
var (
ErrWriteTooLong = os.NewError("write too long")
ErrFieldTooLong = os.NewError("header field too long")
ErrWriteAfterClose = os.NewError("write after close")
)
var (
HeaderError os.Error = os.ErrorString("invalid tar header")
)
Trackback URL
Comments