diff --git a/src/sdk/bfs.h b/src/sdk/bfs.h index 5558d192..9f9f977c 100644 --- a/src/sdk/bfs.h +++ b/src/sdk/bfs.h @@ -54,6 +54,7 @@ class File { File() {} virtual ~File() {} virtual int32_t Pread(char* buf, int32_t read_size, int64_t offset, bool reada = false) = 0; + //for files opened with O_WRONLY, only support Seek(0, SEEK_CUR) virtual int64_t Seek(int64_t offset, int32_t whence) = 0; virtual int32_t Read(char* buf, int32_t read_size) = 0; virtual int32_t Write(const char* buf, int32_t write_size) = 0; diff --git a/src/sdk/file_impl.cc b/src/sdk/file_impl.cc index cce4736d..47f53659 100644 --- a/src/sdk/file_impl.cc +++ b/src/sdk/file_impl.cc @@ -270,6 +270,9 @@ int32_t FileImpl::Pread(char* buf, int32_t read_len, int64_t offset, bool reada) int64_t FileImpl::Seek(int64_t offset, int32_t whence) { //printf("Seek[%s:%d:%ld]\n", _name.c_str(), whence, offset); if (open_flags_ != O_RDONLY) { + if (offset == 0 && whence == SEEK_CUR) { + return common::atomic_add64(&write_offset_, 0); + } return BAD_PARAMETER; } MutexLock lock(&read_offset_mu_);