From 535255f37a5651b281dd60fa216b3095211aab55 Mon Sep 17 00:00:00 2001 From: john Date: Tue, 25 Sep 2018 13:18:43 +0800 Subject: [PATCH] =?UTF-8?q?gfpool=E5=A2=9E=E5=8A=A0=E5=9F=BA=E5=87=86?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/gfpool/gfpool.go | 11 ++++++++--- g/os/gfpool/gfpool_test.go | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 g/os/gfpool/gfpool_test.go diff --git a/g/os/gfpool/gfpool.go b/g/os/gfpool/gfpool.go index 2c47161f7..148babe75 100644 --- a/g/os/gfpool/gfpool.go +++ b/g/os/gfpool/gfpool.go @@ -89,6 +89,8 @@ func (p *Pool) File() (*File, error) { if _, err := f.Seek(0, 2); err != nil { return nil, err } + } else { + f.Seek(0, 0) } if f.flag & os.O_CREATE > 0 { _, err := f.Stat() @@ -103,10 +105,13 @@ func (p *Pool) File() (*File, error) { } } if f.flag & os.O_TRUNC > 0 { - if err := f.Truncate(0); err != nil { - return nil, err + if stat, err := f.Stat(); err == nil { + if stat.Size() > 0 { + if err := f.Truncate(0); err != nil { + return nil, err + } + } } - f.Seek(0, 0) } return f, nil } diff --git a/g/os/gfpool/gfpool_test.go b/g/os/gfpool/gfpool_test.go new file mode 100644 index 000000000..beef6771f --- /dev/null +++ b/g/os/gfpool/gfpool_test.go @@ -0,0 +1,21 @@ +package gfpool + +import ( + "testing" + "os" +) + +func Benchmark_os_Open_Close(b *testing.B) { + for i := 0; i < b.N; i++ { + f, _ := os.OpenFile("/tmp/bench-test", os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0766) + f.Close() + } +} + +func Benchmark_gfpool_Open_Close(b *testing.B) { + for i := 0; i < b.N; i++ { + f, _ := Open("/tmp/bench-test", os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0766) + f.Close() + } +} +