<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 7.5.3 操作bufferevent中的數據 ##通過bufferevent得到evbuffer 如果只是通過網絡讀取或者寫入數據 ,而不能觀察操作過程,是沒什么好處的。bufferevent 提供了下列函數用于觀察要寫入或者讀取的數據。 ```cpp struct evbuffer *bufferevent_get_input(struct bufferevent *bufev); struct evbuffer *bufferevent_get_output(struct bufferevent *bufev); ``` 這兩個函數提供了非常強大的基礎 :它們分別返回輸入和輸出緩沖區 。關于可以對 evbuffer 類型進行的所有操作的完整信息,請看下一章。 如果寫入操作因為數據量太少而停止(或者讀取操作因為太多數據而停止 ),則向輸出緩沖 區添加數據(或者從輸入緩沖區移除數據)將自動重啟操作。 ##向bufferevent的輸出緩沖區添加數據 ```cpp int bufferevent_write(struct bufferevent *bufev, const void *data, size_t size); int bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf); ``` 這些函數向 bufferevent 的輸出緩沖區添加數據。 bufferevent_write()將內存中從 data 處開 始的 size 字節數據添加到輸出緩沖區的末尾 。bufferevent_write_buffer()移除 buf 的所有內 容,將其放置到輸出緩沖區的末尾。成功時這些函數都返回 0,發生錯誤時則返回-1。 ##從bufferevent的輸入緩沖區移除數據 ```cpp size_t bufferevent_read(struct bufferevent *bufev, void *data, size_t size); int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf); ``` 這些函數從 bufferevent 的輸入緩沖區移除數據。bufferevent_read()至多從輸入緩沖區移除 size 字節的數據,將其存儲到內存中 data 處。函數返回實際移除的字節數。 bufferevent_read_buffer()函數抽空輸入緩沖區的所有內容,將其放置到 buf 中,成功時返 回0,失敗時返回 -1。 注意,對于 bufferevent_read(),data 處的內存塊必須有足夠的空間容納 size 字節數據。 ###示例 ```cpp #include <event2/bufferevent.h> #include <event2/buffer.h> #include <ctype.h> void read_callback_uppercase(struct bufferevent *bev, void *ctx) { /* This callback removes the data from bev's input buffer 128 bytes at a time, uppercases it, and starts sending it back. (Watch out! In practice, you shouldn't use toupper to implement a network protocol, unless you know for a fact that the current locale is the one you want to be using.) */ char tmp[128]; size_t n; int i; while (1) { n = bufferevent_read(bev, tmp, sizeof(tmp)); if (n <= 0) break; /* No more data. */ for (i=0; i<n; ++i) tmp[i] = toupper(tmp[i]); bufferevent_write(bev, tmp, n); } } struct proxy_info { struct bufferevent *other_bev; }; void read_callback_proxy(struct bufferevent *bev, void *ctx) { /* You might use a function like this if you're implementing a simple proxy: it will take data from one connection (on bev), and write it to another, copying as little as possible. */ struct proxy_info *inf = ctx; bufferevent_read_buffer(bev, bufferevent_get_output(inf->other_bev)); } struct count { unsigned long last_fib[2]; }; void write_callback_fibonacci(struct bufferevent *bev, void *ctx) { /* Here's a callback that adds some Fibonacci numbers to the output buffer of bev. It stops once we have added 1k of data; once this data is drained, we'll add more. */ struct count *c = ctx; struct evbuffer *tmp = evbuffer_new(); while (evbuffer_get_length(tmp) < 1024) { unsigned long next = c->last_fib[0] + c->last_fib[1]; c->last_fib[0] = c->last_fib[1]; c->last_fib[1] = next; evbuffer_add_printf(tmp, "%lu", next); } /* Now we add the whole contents of tmp to bev. */ bufferevent_write_buffer(bev, tmp); /* We don't need tmp any longer. */ evbuffer_free(tmp); } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看