10 #ifdef MRB_DISABLE_STDIO
11 # error IO and File conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
14 #if defined(__cplusplus)
18 #if defined(MRB_WITHOUT_IO_PREAD_PWRITE)
19 # undef MRB_WITH_IO_PREAD_PWRITE
20 #elif !defined(MRB_WITH_IO_PREAD_PWRITE)
21 # if defined(__unix__) || defined(__MACH__)
22 # define MRB_WITH_IO_PREAD_PWRITE
27 int fd; /* file descriptor, or -1 */
28 int fd2; /* file descriptor to write if it's different from fd, or -1 */
29 int pid; /* child's pid (for pipes) */
30 unsigned int readable:1,
36 #define MRB_O_RDONLY 0x0000
37 #define MRB_O_WRONLY 0x0001
38 #define MRB_O_RDWR 0x0002
39 #define MRB_O_ACCMODE (MRB_O_RDONLY | MRB_O_WRONLY | MRB_O_RDWR)
40 #define MRB_O_NONBLOCK 0x0004
41 #define MRB_O_APPEND 0x0008
42 #define MRB_O_SYNC 0x0010
43 #define MRB_O_NOFOLLOW 0x0020
44 #define MRB_O_CREAT 0x0040
45 #define MRB_O_TRUNC 0x0080
46 #define MRB_O_EXCL 0x0100
47 #define MRB_O_NOCTTY 0x0200
48 #define MRB_O_DIRECT 0x0400
49 #define MRB_O_BINARY 0x0800
50 #define MRB_O_SHARE_DELETE 0x1000
51 #define MRB_O_TMPFILE 0x2000
52 #define MRB_O_NOATIME 0x4000
53 #define MRB_O_DSYNC 0x00008000
54 #define MRB_O_RSYNC 0x00010000
56 #define MRB_O_RDONLY_P(f) ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_RDONLY))
57 #define MRB_O_WRONLY_P(f) ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_WRONLY))
58 #define MRB_O_RDWR_P(f) ((mrb_bool)(((f) & MRB_O_ACCMODE) == MRB_O_RDWR))
59 #define MRB_O_READABLE_P(f) ((mrb_bool)((((f) & MRB_O_ACCMODE) | 2) == 2))
60 #define MRB_O_WRITABLE_P(f) ((mrb_bool)(((((f) & MRB_O_ACCMODE) + 1) & 2) == 2))
62 #define E_IO_ERROR (mrb_class_get(mrb, "IOError"))
63 #define E_EOF_ERROR (mrb_class_get(mrb, "EOFError"))
65 int mrb_io_fileno(mrb_state *mrb, mrb_value io);
67 #if defined(__cplusplus)
70 #endif /* MRUBY_IO_H */