1 // Common/C_FileIO.h
2
3 #include "C_FileIO.h"
4
5 #include <fcntl.h>
6 #include <unistd.h>
7
8 namespace NC {
9 namespace NFile {
10 namespace NIO {
11
OpenBinary(const char * name,int flags)12 bool CFileBase::OpenBinary(const char *name, int flags)
13 {
14 #ifdef O_BINARY
15 flags |= O_BINARY;
16 #endif
17 Close();
18 _handle = ::open(name, flags, 0666);
19 return _handle != -1;
20 }
21
Close()22 bool CFileBase::Close()
23 {
24 if(_handle == -1)
25 return true;
26 if (close(_handle) != 0)
27 return false;
28 _handle = -1;
29 return true;
30 }
31
GetLength(UInt64 & length) const32 bool CFileBase::GetLength(UInt64 &length) const
33 {
34 off_t curPos = Seek(0, SEEK_CUR);
35 off_t lengthTemp = Seek(0, SEEK_END);
36 Seek(curPos, SEEK_SET);
37 length = (UInt64)lengthTemp;
38 return true;
39 }
40
Seek(off_t distanceToMove,int moveMethod) const41 off_t CFileBase::Seek(off_t distanceToMove, int moveMethod) const
42 {
43 return ::lseek(_handle, distanceToMove, moveMethod);
44 }
45
46 /////////////////////////
47 // CInFile
48
Open(const char * name)49 bool CInFile::Open(const char *name)
50 {
51 return CFileBase::OpenBinary(name, O_RDONLY);
52 }
53
Read(void * data,size_t size)54 ssize_t CInFile::Read(void *data, size_t size)
55 {
56 return read(_handle, data, size);
57 }
58
59 /////////////////////////
60 // COutFile
61
Create(const char * name,bool createAlways)62 bool COutFile::Create(const char *name, bool createAlways)
63 {
64 if (createAlways)
65 {
66 Close();
67 _handle = ::creat(name, 0666);
68 return _handle != -1;
69 }
70 return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY);
71 }
72
Write(const void * data,size_t size)73 ssize_t COutFile::Write(const void *data, size_t size)
74 {
75 return write(_handle, data, size);
76 }
77
78 }}}
79