11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
18PROMEKI_NAMESPACE_BEGIN
54class FileIODevice :
public IODevice {
55 PROMEKI_OBJECT(FileIODevice, IODevice)
72 static FileIODevice *stdinDevice();
83 static FileIODevice *stdoutDevice();
94 static FileIODevice *stderrDevice();
108 FileIODevice(FILE *file, OpenMode mode,
int flags = NoFlags, ObjectBase *parent =
nullptr);
119 explicit FileIODevice(
const String &filename, ObjectBase *parent =
nullptr);
129 explicit FileIODevice(ObjectBase *parent =
nullptr);
132 ~FileIODevice()
override;
141 void setFilename(
const String &filename);
147 const String &filename()
const {
return _filename; }
153 FILE *file()
const {
return _file; }
159 bool ownsFile()
const {
return _ownsFile; }
182 Error open(OpenMode mode)
override;
184 Error close()
override;
185 void flush()
override;
186 bool isOpen()
const override;
187 int64_t read(
void *data, int64_t maxSize)
override;
188 int64_t write(
const void *data, int64_t maxSize)
override;
189 bool isSequential()
const override;
190 Error seek(int64_t pos)
override;
191 int64_t pos()
const override;
192 bool atEnd()
const override;
195 FILE *_file =
nullptr;
197 bool _ownsFile =
false;