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
OpenShared(const char * name,bool)54 bool CInFile::OpenShared(const char *name, bool)
55 {
56 return Open(name);
57 }
58
Read(void * data,size_t size)59 ssize_t CInFile::Read(void *data, size_t size)
60 {
61 return read(_handle, data, size);
62 }
63
64 /////////////////////////
65 // COutFile
66
Create(const char * name,bool createAlways)67 bool COutFile::Create(const char *name, bool createAlways)
68 {
69 if (createAlways)
70 {
71 Close();
72 _handle = ::creat(name, 0666);
73 return _handle != -1;
74 }
75 return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY);
76 }
77
Open(const char * name,DWORD creationDisposition)78 bool COutFile::Open(const char *name, DWORD creationDisposition)
79 {
80 return Create(name, false);
81 }
82
Write(const void * data,size_t size)83 ssize_t COutFile::Write(const void *data, size_t size)
84 {
85 return write(_handle, data, size);
86 }
87
88 }}}
89