也談構建自己的標準流緩衝 操作Pipe的流緩衝

2021-04-14 08:14:08 字數 1357 閱讀 8040

研究了半天總算有了一點概念。

下面是 basic_streambuf 裡和緩衝區相關的幾個成員函式。

對於輸入緩衝區:

eback() : 指向輸入緩衝起始的位置

gptr() : 返回指向下乙個讀取元素所在的位置

egptr() : 返回指向最後乙個可讀元素(注意,這個指向的不是你建立的緩衝區的結尾)

// 對於輸出緩衝區

pbase(), 指向輸出緩衝的起始位置

pptr(), 指向下乙個可寫的位置

epptr(), 指向輸出緩衝的末尾(也就是你建立的輸出緩衝區的末尾)

其他不多說看**,這個是吧 windows 的 pipe (管道) 操作封裝在流裡面的例子 :

template

class basic_pipebuf : public std::basic_streambuf<_elem, _traits>

~basic_pipebuf()

bool open( handle handle )

void close()

}bool is_open()

public:

static const int pipe_buffer_size=1024; // 緩衝區大小

protected:

void init_out_buf()

void init_in_buf()

// 把輸出緩衝區的資料寫入管道

virtual int sync()

}

assert( cbread >0 );

assert( (cbread % sizeof(_elem))==0 );

// 設定輸入緩衝的指標

setg( eback(), eback(), eback()+ ( cbread / sizeof(_elem) ) );

return _traits::to_int_type(*gptr()); // 返回第乙個字元

}

virtual int_type overflow( int_type c = _traits::eof() )  

private:

std::string _name;

handle _handle_pipe;

};

typedef basic_pipebuf< char, std::char_traits> pipebuf;

typedef basic_pipebuf< wchar_t, std::char_traits> wpipebuf;

至於完整的流物件,構建應該相當簡單,回頭再放出。

構建自己的映象

參考鏈結 tensorflow tensorflow僅支援py2.7所以需要構建自己的基於py3.5的tensorflow映象 1查詢ubuntu映象,建立容器 nvidia docker search ubuntu nvidia docker run it d name myimage ubunt...

也談Vista的解除安裝現象

照理說,使用者買了一台預裝 vista 的電腦之後,應該非常高興才對。但是,事實上,並不如此。我有一位朋友,前不久購買了一台 hp v3431au 膝上型電腦,其中預裝了 vista 作業系統,開始很新奇。我也試了一把。不料,才過了乙個來星期時間,他卻把它 格了 徹底解除安裝 我大為吃驚。這 指 v...

也談mysql的limit優化

測試環境 作業系統 debian linux 伺服器版本 mysql 5.0.24 mysql資料庫的qcache快取關閉 資料庫表testtable的引數 型別 myisam 大小 80mb 記錄規模 50000 字段數 25個字段 id是主鍵 leibie欄位上建有索引 進行資料分段測試 1 s...