File indexing completed on 2026-05-06 08:41:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #ifndef __G_IOCHANNEL_H__
0028 #define __G_IOCHANNEL_H__
0029
0030 #if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
0031 #error "Only <glib.h> can be included directly."
0032 #endif
0033
0034 #include <glib/gconvert.h>
0035 #include <glib/gmain.h>
0036 #include <glib/gstring.h>
0037
0038 G_BEGIN_DECLS
0039
0040
0041
0042
0043 typedef struct _GIOChannel GIOChannel;
0044 typedef struct _GIOFuncs GIOFuncs;
0045
0046 typedef enum
0047 {
0048 G_IO_ERROR_NONE,
0049 G_IO_ERROR_AGAIN,
0050 G_IO_ERROR_INVAL,
0051 G_IO_ERROR_UNKNOWN
0052 } GIOError;
0053
0054 #define G_IO_CHANNEL_ERROR g_io_channel_error_quark()
0055
0056 typedef enum
0057 {
0058
0059 G_IO_CHANNEL_ERROR_FBIG,
0060 G_IO_CHANNEL_ERROR_INVAL,
0061 G_IO_CHANNEL_ERROR_IO,
0062 G_IO_CHANNEL_ERROR_ISDIR,
0063 G_IO_CHANNEL_ERROR_NOSPC,
0064 G_IO_CHANNEL_ERROR_NXIO,
0065 G_IO_CHANNEL_ERROR_OVERFLOW,
0066 G_IO_CHANNEL_ERROR_PIPE,
0067
0068 G_IO_CHANNEL_ERROR_FAILED
0069 } GIOChannelError;
0070
0071 typedef enum
0072 {
0073 G_IO_STATUS_ERROR,
0074 G_IO_STATUS_NORMAL,
0075 G_IO_STATUS_EOF,
0076 G_IO_STATUS_AGAIN
0077 } GIOStatus;
0078
0079 typedef enum
0080 {
0081 G_SEEK_CUR,
0082 G_SEEK_SET,
0083 G_SEEK_END
0084 } GSeekType;
0085
0086 typedef enum
0087 {
0088 G_IO_FLAG_NONE GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
0089 G_IO_FLAG_APPEND = 1 << 0,
0090 G_IO_FLAG_NONBLOCK = 1 << 1,
0091 G_IO_FLAG_IS_READABLE = 1 << 2,
0092 G_IO_FLAG_IS_WRITABLE = 1 << 3,
0093 G_IO_FLAG_IS_WRITEABLE = 1 << 3,
0094 G_IO_FLAG_IS_SEEKABLE = 1 << 4,
0095 G_IO_FLAG_MASK = (1 << 5) - 1,
0096 G_IO_FLAG_GET_MASK = G_IO_FLAG_MASK,
0097 G_IO_FLAG_SET_MASK = G_IO_FLAG_APPEND | G_IO_FLAG_NONBLOCK
0098 } GIOFlags;
0099
0100 struct _GIOChannel
0101 {
0102
0103 gint ref_count;
0104 GIOFuncs *funcs;
0105
0106 gchar *encoding;
0107 GIConv read_cd;
0108 GIConv write_cd;
0109 gchar *line_term;
0110 guint line_term_len;
0111
0112 gsize buf_size;
0113 GString *read_buf;
0114 GString *encoded_read_buf;
0115 GString *write_buf;
0116 gchar partial_write_buf[6];
0117
0118
0119
0120 guint use_buffer : 1;
0121 guint do_encode : 1;
0122 guint close_on_unref : 1;
0123 guint is_readable : 1;
0124 guint is_writeable : 1;
0125 guint is_seekable : 1;
0126
0127 gpointer reserved1;
0128 gpointer reserved2;
0129 };
0130
0131 typedef gboolean (*GIOFunc) (GIOChannel *source,
0132 GIOCondition condition,
0133 gpointer data);
0134 struct _GIOFuncs
0135 {
0136 GIOStatus (*io_read) (GIOChannel *channel,
0137 gchar *buf,
0138 gsize count,
0139 gsize *bytes_read,
0140 GError **err);
0141 GIOStatus (*io_write) (GIOChannel *channel,
0142 const gchar *buf,
0143 gsize count,
0144 gsize *bytes_written,
0145 GError **err);
0146 GIOStatus (*io_seek) (GIOChannel *channel,
0147 gint64 offset,
0148 GSeekType type,
0149 GError **err);
0150 GIOStatus (*io_close) (GIOChannel *channel,
0151 GError **err);
0152 GSource* (*io_create_watch) (GIOChannel *channel,
0153 GIOCondition condition);
0154 void (*io_free) (GIOChannel *channel);
0155 GIOStatus (*io_set_flags) (GIOChannel *channel,
0156 GIOFlags flags,
0157 GError **err);
0158 GIOFlags (*io_get_flags) (GIOChannel *channel);
0159 };
0160
0161 GLIB_AVAILABLE_IN_ALL
0162 void g_io_channel_init (GIOChannel *channel);
0163 GLIB_AVAILABLE_IN_ALL
0164 GIOChannel *g_io_channel_ref (GIOChannel *channel);
0165 GLIB_AVAILABLE_IN_ALL
0166 void g_io_channel_unref (GIOChannel *channel);
0167
0168 GLIB_DEPRECATED_FOR(g_io_channel_read_chars)
0169 GIOError g_io_channel_read (GIOChannel *channel,
0170 gchar *buf,
0171 gsize count,
0172 gsize *bytes_read);
0173
0174 GLIB_DEPRECATED_FOR(g_io_channel_write_chars)
0175 GIOError g_io_channel_write (GIOChannel *channel,
0176 const gchar *buf,
0177 gsize count,
0178 gsize *bytes_written);
0179
0180 GLIB_DEPRECATED_FOR(g_io_channel_seek_position)
0181 GIOError g_io_channel_seek (GIOChannel *channel,
0182 gint64 offset,
0183 GSeekType type);
0184
0185 GLIB_DEPRECATED_FOR(g_io_channel_shutdown)
0186 void g_io_channel_close (GIOChannel *channel);
0187
0188 GLIB_AVAILABLE_IN_ALL
0189 GIOStatus g_io_channel_shutdown (GIOChannel *channel,
0190 gboolean flush,
0191 GError **err);
0192 GLIB_AVAILABLE_IN_ALL
0193 guint g_io_add_watch_full (GIOChannel *channel,
0194 gint priority,
0195 GIOCondition condition,
0196 GIOFunc func,
0197 gpointer user_data,
0198 GDestroyNotify notify);
0199 GLIB_AVAILABLE_IN_ALL
0200 GSource * g_io_create_watch (GIOChannel *channel,
0201 GIOCondition condition);
0202 GLIB_AVAILABLE_IN_ALL
0203 guint g_io_add_watch (GIOChannel *channel,
0204 GIOCondition condition,
0205 GIOFunc func,
0206 gpointer user_data);
0207
0208
0209
0210
0211 GLIB_AVAILABLE_IN_ALL
0212 void g_io_channel_set_buffer_size (GIOChannel *channel,
0213 gsize size);
0214 GLIB_AVAILABLE_IN_ALL
0215 gsize g_io_channel_get_buffer_size (GIOChannel *channel);
0216 GLIB_AVAILABLE_IN_ALL
0217 GIOCondition g_io_channel_get_buffer_condition (GIOChannel *channel);
0218 GLIB_AVAILABLE_IN_ALL
0219 GIOStatus g_io_channel_set_flags (GIOChannel *channel,
0220 GIOFlags flags,
0221 GError **error);
0222 GLIB_AVAILABLE_IN_ALL
0223 GIOFlags g_io_channel_get_flags (GIOChannel *channel);
0224 GLIB_AVAILABLE_IN_ALL
0225 void g_io_channel_set_line_term (GIOChannel *channel,
0226 const gchar *line_term,
0227 gint length);
0228 GLIB_AVAILABLE_IN_ALL
0229 const gchar * g_io_channel_get_line_term (GIOChannel *channel,
0230 gint *length);
0231 GLIB_AVAILABLE_IN_ALL
0232 void g_io_channel_set_buffered (GIOChannel *channel,
0233 gboolean buffered);
0234 GLIB_AVAILABLE_IN_ALL
0235 gboolean g_io_channel_get_buffered (GIOChannel *channel);
0236 GLIB_AVAILABLE_IN_ALL
0237 GIOStatus g_io_channel_set_encoding (GIOChannel *channel,
0238 const gchar *encoding,
0239 GError **error);
0240 GLIB_AVAILABLE_IN_ALL
0241 const gchar * g_io_channel_get_encoding (GIOChannel *channel);
0242 GLIB_AVAILABLE_IN_ALL
0243 void g_io_channel_set_close_on_unref (GIOChannel *channel,
0244 gboolean do_close);
0245 GLIB_AVAILABLE_IN_ALL
0246 gboolean g_io_channel_get_close_on_unref (GIOChannel *channel);
0247
0248
0249 GLIB_AVAILABLE_IN_ALL
0250 GIOStatus g_io_channel_flush (GIOChannel *channel,
0251 GError **error);
0252 GLIB_AVAILABLE_IN_ALL
0253 GIOStatus g_io_channel_read_line (GIOChannel *channel,
0254 gchar **str_return,
0255 gsize *length,
0256 gsize *terminator_pos,
0257 GError **error);
0258 GLIB_AVAILABLE_IN_ALL
0259 GIOStatus g_io_channel_read_line_string (GIOChannel *channel,
0260 GString *buffer,
0261 gsize *terminator_pos,
0262 GError **error);
0263 GLIB_AVAILABLE_IN_ALL
0264 GIOStatus g_io_channel_read_to_end (GIOChannel *channel,
0265 gchar **str_return,
0266 gsize *length,
0267 GError **error);
0268 GLIB_AVAILABLE_IN_ALL
0269 GIOStatus g_io_channel_read_chars (GIOChannel *channel,
0270 gchar *buf,
0271 gsize count,
0272 gsize *bytes_read,
0273 GError **error);
0274 GLIB_AVAILABLE_IN_ALL
0275 GIOStatus g_io_channel_read_unichar (GIOChannel *channel,
0276 gunichar *thechar,
0277 GError **error);
0278 GLIB_AVAILABLE_IN_ALL
0279 GIOStatus g_io_channel_write_chars (GIOChannel *channel,
0280 const gchar *buf,
0281 gssize count,
0282 gsize *bytes_written,
0283 GError **error);
0284 GLIB_AVAILABLE_IN_ALL
0285 GIOStatus g_io_channel_write_unichar (GIOChannel *channel,
0286 gunichar thechar,
0287 GError **error);
0288 GLIB_AVAILABLE_IN_ALL
0289 GIOStatus g_io_channel_seek_position (GIOChannel *channel,
0290 gint64 offset,
0291 GSeekType type,
0292 GError **error);
0293 GLIB_AVAILABLE_IN_ALL
0294 GIOChannel* g_io_channel_new_file (const gchar *filename,
0295 const gchar *mode,
0296 GError **error);
0297
0298
0299
0300 GLIB_AVAILABLE_IN_ALL
0301 GQuark g_io_channel_error_quark (void);
0302 GLIB_AVAILABLE_IN_ALL
0303 GIOChannelError g_io_channel_error_from_errno (gint en);
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323 GLIB_AVAILABLE_IN_ALL
0324 GIOChannel* g_io_channel_unix_new (int fd);
0325 GLIB_AVAILABLE_IN_ALL
0326 gint g_io_channel_unix_get_fd (GIOChannel *channel);
0327
0328
0329
0330 GLIB_VAR GSourceFuncs g_io_watch_funcs;
0331
0332 #ifdef G_OS_WIN32
0333
0334
0335
0336
0337
0338 #define G_WIN32_MSG_HANDLE 19981206
0339
0340
0341
0342
0343
0344
0345
0346 GLIB_AVAILABLE_IN_ALL
0347 void g_io_channel_win32_make_pollfd (GIOChannel *channel,
0348 GIOCondition condition,
0349 GPollFD *fd);
0350
0351
0352
0353
0354 GLIB_AVAILABLE_IN_ALL
0355 gint g_io_channel_win32_poll (GPollFD *fds,
0356 gint n_fds,
0357 gint timeout_);
0358
0359
0360 #if GLIB_SIZEOF_VOID_P == 8
0361
0362
0363
0364
0365 GLIB_AVAILABLE_IN_ALL
0366 GIOChannel *g_io_channel_win32_new_messages (gsize hwnd);
0367 #else
0368 GLIB_AVAILABLE_IN_ALL
0369 GIOChannel *g_io_channel_win32_new_messages (guint hwnd);
0370 #endif
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381 GLIB_AVAILABLE_IN_ALL
0382 GIOChannel* g_io_channel_win32_new_fd (gint fd);
0383
0384
0385 GLIB_AVAILABLE_IN_ALL
0386 gint g_io_channel_win32_get_fd (GIOChannel *channel);
0387
0388
0389
0390
0391
0392
0393 GLIB_AVAILABLE_IN_ALL
0394 GIOChannel *g_io_channel_win32_new_socket (gint socket);
0395
0396 GLIB_DEPRECATED_FOR(g_io_channel_win32_new_socket)
0397 GIOChannel *g_io_channel_win32_new_stream_socket (gint socket);
0398
0399 GLIB_AVAILABLE_IN_ALL
0400 void g_io_channel_win32_set_debug (GIOChannel *channel,
0401 gboolean flag);
0402
0403 #endif
0404
0405 G_END_DECLS
0406
0407 #endif