Jpp  17.2.1-pre0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JFile.hh
Go to the documentation of this file.
1 #ifndef __JLANG__JFILE__
2 #define __JLANG__JFILE__
3 
4 #include <fcntl.h>
5 
6 #include "JLang/JBinaryIO.hh"
7 #include "JLang/JAbstractFile.hh"
9 #include "JLang/JTimeval.hh"
10 #include <unistd.h>
11 
12 /**
13  * \author mdejong
14  */
15 
16 namespace JLANG {}
17 namespace JPP { using namespace JLANG; }
18 
19 namespace JLANG {
20 
21 
22  /**
23  * The JFile class extends the JAbstractFile class.
24  * This class implements the JBinaryInput and JBinaryOutput interfaces.
25  */
26  class JFile :
27  public JAbstractFile,
28  public JBinaryInput,
29  public JBinaryOutput
30  {
31  public:
32  /**
33  * Default constructor.
34  */
35  JFile() :
36  JAbstractFile(),
37  result(0)
38  {}
39 
40 
41  /**
42  * Constructor.
43  *
44  * \param file file descriptor
45  */
46  JFile(const JAbstractFile& file) :
47  JAbstractFile(file),
48  result(1)
49  {}
50 
51 
52  /**
53  * Close file.
54  */
55  void close()
56  {
57  if (fileDescriptor != FILE_CLOSED) {
58 
60 
62  result = 0;
63  }
64  }
65 
66 
67  /**
68  * Read data from file.
69  *
70  * \param buffer buffer
71  * \param length number of bytes to read
72  * \return number of bytes read
73  */
74  virtual int read(char* buffer, const int length)
75  {
76  return (result = ::read(fileDescriptor, buffer, length));
77  }
78 
79 
80  /**
81  * Write data to file.
82  *
83  * \param buffer buffer
84  * \param length number of bytes to write
85  * \return number of bytes written
86  */
87  virtual int write(const char* buffer, const int length)
88  {
89  return (result = ::write(fileDescriptor, buffer, length));
90  }
91 
92 
93  /**
94  * Check availability of input.
95  * This method returns true if at least one byte can be read without blocking.
96  *
97  * \param timeout timeout
98  * \return true if ready to read; else false
99  */
100  bool in_avail(JTimeval timeout = JTimeval::min()) const
101  {
102  return JFileDescriptorMask(*this).in_avail(timeout);
103  }
104 
105 
106  /**
107  * Check availability of output.
108  * This method returns true if at least one byte can be written without blocking.
109  *
110  * \param timeout timeout
111  * \return true if ready to write; else false
112  */
113  bool out_avail(JTimeval timeout = JTimeval::min()) const
114  {
115  return JFileDescriptorMask(*this).out_avail(timeout);
116  }
117 
118 
119  /**
120  * Check status.
121  *
122  * \return true if last I/O operation successful; else false
123  */
124  virtual bool good() const
125  {
126  return is_open() && !eof() && !bad();
127  }
128 
129 
130  /**
131  * Check status.
132  *
133  * \return true if last I/O operation caused logical error; else false
134  */
135  virtual bool fail() const
136  {
137  return result == 0;
138  }
139 
140 
141  /**
142  * Check status.
143  *
144  * \return true if last I/O operation caused read/write error; else false
145  */
146  virtual bool bad() const
147  {
148  return fail();
149  }
150 
151 
152  /**
153  * Check end of file.
154  *
155  * \return true if end of file; else false
156  */
157  virtual bool eof() const
158  {
159  return result == EOF;
160  }
161 
162 
163  private:
164  int result;
165  };
166 }
167 
168 #endif
Interface for binary input.
Definition: JBinaryIO.hh:18
virtual bool eof() const
Check end of file.
Definition: JFile.hh:157
void close()
Close file.
Definition: JFile.hh:55
static JTimeval min()
Get minimal time value.
Definition: JTimeval.hh:119
virtual bool good() const
Check status.
Definition: JFile.hh:124
virtual int read(char *buffer, const int length)
Read data from file.
Definition: JFile.hh:74
virtual bool fail() const
Check status.
Definition: JFile.hh:135
Auxiliary class for time values.
Definition: JTimeval.hh:26
bool in_avail(JTimeval timeout=JTimeval::min()) const
Check availability of input.
Definition: JFile.hh:100
The JFile class extends the JAbstractFile class.
Definition: JFile.hh:26
static const int FILE_CLOSED
bool out_avail(JTimeval timeout=JTimeval::min())
Check availability of output.
bool is_open() const
Get open status.
Auxiliary class for method select.
The JAbstractFile class encapsulates the c-style file descriptor.
bool out_avail(JTimeval timeout=JTimeval::min()) const
Check availability of output.
Definition: JFile.hh:113
JFile(const JAbstractFile &file)
Constructor.
Definition: JFile.hh:46
int result
Definition: JFile.hh:164
virtual bool bad() const
Check status.
Definition: JFile.hh:146
virtual int write(const char *buffer, const int length)
Write data to file.
Definition: JFile.hh:87
Interface for binary output.
Definition: JBinaryIO.hh:41
JFile()
Default constructor.
Definition: JFile.hh:35
bool in_avail(JTimeval timeout=JTimeval::min())
Check availability of input.