2 #include "handle_private.h"
9 File::File(const string &fn, Mode m, CreateMode cm)
12 throw invalid_argument("File::File mode");
13 if(cm&~(C_CREATE|C_TRUNCATE|C_EXCLUSIVE))
14 throw invalid_argument("File::File create");
15 if((cm&C_EXCLUSIVE) && (!(cm&C_CREATE) || (cm&C_TRUNCATE)))
16 throw invalid_argument("File::File create");
20 platform_init(fn, cm);
25 signal_flush_required.emit();
29 void File::set_block(bool b)
31 mode = b?(mode&~M_NONBLOCK):(mode|M_NONBLOCK);
32 sys_set_blocking(handle, b);
35 unsigned File::do_write(const char *buf, unsigned size)
37 check_access(M_WRITE);
47 return sys_write(handle, buf, size);
50 unsigned File::do_read(char *buf, unsigned size)
57 unsigned ret = sys_read(handle, buf, size);
64 SeekOffset File::seek(SeekOffset off, SeekType type)
66 signal_flush_required.emit();
67 off = sys_seek(handle, off, type);
73 SeekOffset File::tell() const
75 return sys_seek(const_cast<Handle &>(handle), 0, S_CUR);
78 const Handle &File::get_handle(Mode m)