關於環形緩衝區的使用

2021-07-31 22:34:18 字數 837 閱讀 9773

int cramfifobuffer::fifo_write(char* pbuf, size_t size)

bool islast = false;

if (!m_iswritefirst)

//這個邏輯是為了判斷讀指標是否已經到了尾段

nodelist::iterator itr = m_nodelist.begin();

nodebuffer item = *itr;

if (item.pnode + item.ilen > ptail)//說明已經讀到了buffer最後

m_nodelist.erase(itr);

if (m_nodelist.size() == 0)

itr = m_nodelist.begin();

item = *itr;

pread = item.pnode;//讀指標移動到下乙個記憶體對映位置

if (islast)

return 1;}}

return 1;

}//讀取記憶體緩衝區資料

int cramfifobuffer::fifo_read(char *dest, int& buf_size)

int len = min(ptail - pread, buf_size);

memcpy(dest, pread, len); //將資料拷貝到dest

pread += len;  //將資料拷貝到pwrie

if (pread >= ptail)

m_nodelist.erase(itr);//讀取後刪除記憶體節點

return 1;

}其實原理很簡單,如果感興趣的同學可以看些原始碼

環形緩衝區

include include include include include define buffsize 1024 1024 define min x,y x y x y pthread mutex t lock pthread mutex initializer struct cycle b...

環形緩衝區

define print buf size 16 1024 static char g pcnetprintbuf 環形緩衝區的首位址 static int g ireadpos 0 環形緩衝區讀的位置 static int g iwritepos 0 環形緩衝區寫的位置 intinit 判斷環形緩...

環形緩衝區

環形緩衝區要維護兩個索引,分別對應寫入端 w 和讀取端 r 寫入 push 的時候,先確保環沒滿,然後把資料複製到 w 所對應的元素,最後 w 指向下乙個元素 讀取 pop 的時候,先確保環沒空,然後返回 r 對應的元素,最後 r 指向下乙個元素。上述的操作並不複雜,不過有乙個小小的麻煩 空環和滿環...