⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gnet-iochannel.html

📁 GNet是一个简单的网络库。它是目标定向的
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<HTML><HEAD><TITLE>iochannel</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.77+"><LINKREL="HOME"TITLE="GNet Network Library Reference Manual"HREF="book1.html"><LINKREL="UP"TITLE="GNet Library Reference"HREF="libgnet-reference.html"><LINKREL="PREVIOUS"TITLE="mcast"HREF="gnet-mcast.html"><LINKREL="NEXT"TITLE="pack"HREF="gnet-pack.html"></HEAD><BODYCLASS="REFENTRY"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLEWIDTH="100%"BORDER="0"BGCOLOR="#000000"CELLPADDING="1"CELLSPACING="0"><TR><THCOLSPAN="4"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="5">GNet Network Library Reference Manual</FONT></TH></TR><TR><TDWIDTH="25%"BGCOLOR="#C00000"ALIGN="left"><AHREF="gnet-mcast.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>&#60;&#60;&#60; Previous Page</B></FONT></A></TD><TDWIDTH="25%"BGCOLOR="#0000C0"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="3"><B><AHREF="book1.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Home</B></FONT></A></B></FONT></TD><TDWIDTH="25%"BGCOLOR="#00C000"ALIGN="center"><FONTCOLOR="#FFFFFF"SIZE="3"><B><AHREF="libgnet-reference.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Up</B></FONT></A></B></FONT></TD><TDWIDTH="25%"BGCOLOR="#C00000"ALIGN="right"><AHREF="gnet-pack.html"><FONTCOLOR="#FFFFFF"SIZE="3"><B>Next Page &#62;&#62;&#62;</B></FONT></A></TD></TR></TABLE></DIV><H1><ANAME="GNET-IOCHANNEL"></A>iochannel</H1><DIVCLASS="REFNAMEDIV"><ANAME="AEN2761"></A><H2>Name</H2>iochannel&nbsp;--&nbsp;</DIV><DIVCLASS="REFSYNOPSISDIV"><ANAME="AEN2764"></A><H2>Synopsis</H2><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="SYNOPSIS">&#13;<GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-WRITEN">gnet_io_channel_writen</A>          (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> buf,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> len,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_written);<GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READN">gnet_io_channel_readn</A>           (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> buf,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> len,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_read);<GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READLINE">gnet_io_channel_readline</A>        (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> *buf,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> len,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_read);<GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READLINE-STRDUP">gnet_io_channel_readline_strdup</A> (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> **buf_ptr,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_read);enum        <AHREF="gnet-iochannel.html#GNETIOCHANNELWRITEASYNCSTATUS">GNetIOChannelWriteAsyncStatus</A>;typedef     <AHREF="gnet-iochannel.html#GNETIOCHANNELWRITEASYNCID">GNetIOChannelWriteAsyncID</A>;<AHREF="gnet-iochannel.html#GNETIOCHANNELWRITEASYNCID">GNetIOChannelWriteAsyncID</A> <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-WRITE-ASYNC">gnet_io_channel_write_async</A>                                            (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *iochannel,                                             <GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> *buffer,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> length,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> timeout,                                             <GTKDOCLINKHREF="GNETIOCHANNELWRITEASYNCFUNC">GNetIOChannelWriteAsyncFunc</GTKDOCLINK> func,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> user_data);void        <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-WRITE-ASYNC-CANCEL">gnet_io_channel_write_async_cancel</A>                                            (<AHREF="gnet-iochannel.html#GNETIOCHANNELWRITEASYNCID">GNetIOChannelWriteAsyncID</A> id,                                             <GTKDOCLINKHREF="GBOOLEAN">gboolean</GTKDOCLINK> delete_buffer);enum        <AHREF="gnet-iochannel.html#GNETIOCHANNELREADASYNCSTATUS">GNetIOChannelReadAsyncStatus</A>;typedef     <AHREF="gnet-iochannel.html#GNETIOCHANNELREADASYNCID">GNetIOChannelReadAsyncID</A>;<AHREF="gnet-iochannel.html#GNETIOCHANNELREADASYNCID">GNetIOChannelReadAsyncID</A> <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READ-ASYNC">gnet_io_channel_read_async</A>                                            (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *iochannel,                                             <GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> *buffer,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> length,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> timeout,                                             <GTKDOCLINKHREF="GBOOLEAN">gboolean</GTKDOCLINK> read_one_byte_at_a_time,                                             <GTKDOCLINKHREF="GNETIOCHANNELREADASYNCCHECKFUNC">GNetIOChannelReadAsyncCheckFunc</GTKDOCLINK> check_func,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> check_user_data,                                             <GTKDOCLINKHREF="GNETIOCHANNELREADASYNCFUNC">GNetIOChannelReadAsyncFunc</GTKDOCLINK> func,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> user_data);void        <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READ-ASYNC-CANCEL">gnet_io_channel_read_async_cancel</A>                                            (<AHREF="gnet-iochannel.html#GNETIOCHANNELREADASYNCID">GNetIOChannelReadAsyncID</A> id);<GTKDOCLINKHREF="GINT">gint</GTKDOCLINK>        <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READANY-CHECK-FUNC">gnet_io_channel_readany_check_func</A>                                            (<GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> *buffer,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> length,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> data);<GTKDOCLINKHREF="GINT">gint</GTKDOCLINK>        <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READLINE-CHECK-FUNC">gnet_io_channel_readline_check_func</A>                                            (<GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> *buffer,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> length,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> data);#define     <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READANY-ASYNC">gnet_io_channel_readany_async</A>   (IO, BUF, LEN, TO, FUNC, UD)#define     <AHREF="gnet-iochannel.html#GNET-IO-CHANNEL-READLINE-ASYNC">gnet_io_channel_readline_async</A>  (IO, BUF, LEN, TO, FUNC, UD)</PRE></TD></TR></TABLE></DIV><DIVCLASS="REFSECT1"><ANAME="AEN2830"></A><H2>Description</H2><P></P></DIV><DIVCLASS="REFSECT1"><ANAME="AEN2833"></A><H2>Details</H2><DIVCLASS="REFSECT2"><ANAME="AEN2835"></A><H3><ANAME="GNET-IO-CHANNEL-WRITEN"></A>gnet_io_channel_writen ()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING"><GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    gnet_io_channel_writen          (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> buf,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> len,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_written);</PRE></TD></TR></TABLE><P>Write all <TTCLASS="PARAMETER"><I>len</I></TT> bytes in the buffer to the channel.  This isbasically a wrapper around <GTKDOCLINKHREF="G-IO-CHANNEL-WRITE">g_io_channel_write</GTKDOCLINK>().  The problem with<GTKDOCLINKHREF="G-IO-CHANNEL-WRITE">g_io_channel_write</GTKDOCLINK>() is that it may not write all the bytes in thebuffer and return a short count even when there was not an error(this is rare, but it can happen and is often difficult to detectwhen it does).</P><P></P><P></P><TABLECLASS="VARIABLELIST"BORDER="0"CELLSPACING="0"CELLPADDING="4"WIDTH="100%"BGCOLOR="#FFD0D0"><TBODY><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2850"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>channel</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2855"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>buf</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2860"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>len</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2865"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>bytes_written</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2870"><SPANSTYLE="white-space: nowrap"><SPANCLASS="emphasis"><ICLASS="EMPHASIS">Returns</I></SPAN> :</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P>&#13;</P></TD></TR></TBODY></TABLE></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN2875"></A><H3><ANAME="GNET-IO-CHANNEL-READN"></A>gnet_io_channel_readn ()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING"><GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    gnet_io_channel_readn           (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GPOINTER">gpointer</GTKDOCLINK> buf,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> len,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_read);</PRE></TD></TR></TABLE><P>Read exactly <TTCLASS="PARAMETER"><I>len</I></TT> bytes from the channel the buffer to the channel.This is basically a wrapper around <GTKDOCLINKHREF="G-IO-CHANNEL-READ">g_io_channel_read</GTKDOCLINK>().  Theproblem with <GTKDOCLINKHREF="G-IO-CHANNEL-READ">g_io_channel_read</GTKDOCLINK>() is that it may not read all thebytes wanted and return a short count even when there was not anerror (this is rare, but it can happen and is often difficult todetect when it does).</P><P></P><P></P><TABLECLASS="VARIABLELIST"BORDER="0"CELLSPACING="0"CELLPADDING="4"WIDTH="100%"BGCOLOR="#FFD0D0"><TBODY><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2890"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>channel</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2895"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>buf</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2900"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>len</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2905"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>bytes_read</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2910"><SPANSTYLE="white-space: nowrap"><SPANCLASS="emphasis"><ICLASS="EMPHASIS">Returns</I></SPAN> :</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P>&#13;</P></TD></TR></TBODY></TABLE></DIV><HR><DIVCLASS="REFSECT2"><ANAME="AEN2915"></A><H3><ANAME="GNET-IO-CHANNEL-READLINE"></A>gnet_io_channel_readline ()</H3><TABLEBORDER="0"BGCOLOR="#D6E8FF"WIDTH="100%"CELLPADDING="6"><TR><TD><PRECLASS="PROGRAMLISTING"><GTKDOCLINKHREF="GIOERROR">GIOError</GTKDOCLINK>    gnet_io_channel_readline        (<GTKDOCLINKHREF="GIOCHANNEL">GIOChannel</GTKDOCLINK> *channel,                                             <GTKDOCLINKHREF="GCHAR">gchar</GTKDOCLINK> *buf,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> len,                                             <GTKDOCLINKHREF="GUINT">guint</GTKDOCLINK> *bytes_read);</PRE></TD></TR></TABLE><P>Read a line from the channel.  The line will be null-terminated andinclude the newline character.  If there is not enough room for theline, the line is truncated to fit in the buffer.</P><P>Warnings: (in the gotcha sense, not the bug sense)</P><P>1. If the buffer is full and the last character is not a newline,the line was truncated.  So, do not assume the buffer ends with anewline.</P><P>2. <TTCLASS="PARAMETER"><I>bytes_read</I></TT> is actually the number of bytes put in the buffer.That is, it includes the terminating null character.</P><P>3. Null characters can appear in the line before the terminatingnull (I could send the string "Hello world\0\n").  If this mattersin your program, check the string length of the buffer against thebytes read.</P><P>I hope this isn't too confusing.  Usually the function works as youexpect it to if you have a big enough buffer.  If you have theStevens book, you should be familiar with the semantics.</P><P></P><P></P><TABLECLASS="VARIABLELIST"BORDER="0"CELLSPACING="0"CELLPADDING="4"WIDTH="100%"BGCOLOR="#FFD0D0"><TBODY><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2933"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>channel</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR><TR><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="20%"><ANAME="AEN2938"><SPANSTYLE="white-space: nowrap"><TTCLASS="PARAMETER"><I>buf</I></TT>&nbsp;:</SPAN></TD><TDALIGN="LEFT"VALIGN="TOP"WIDTH="80%"><P></P></TD></TR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -