gpt4 book ai didi

c++ - 如何复制缓冲区中的数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:54 26 4
gpt4 key购买 nike

我正在使用 epoll 进行网络编程,我有这段代码。

            int str_len = read(m_events[i].data.fd, buf, BUF_SIZE);
printf("read %d \n", str_len);

if(str_len == 0){
if(!removeClient(m_events[i].data.fd))
break;
close(m_events[i].data.fd);

}
else {
printf("ServerManager::eventAcceptLoop, A message has been received \n");
pushWork(buf);
}

buf 是这样声明的

buf[BUF_SIZE];

我想将 buf 中的数据传递给函数“pushWork”

 pushWork(char * pdata){
hand this pdata to the thread pool to parse and handle it
}

我认为我需要复制 buf 中的数据而不是指向 buf,因为每当有新数据进入时它都会被覆盖。现在我做类似的事情

 char *pdata = buf;
pushWork(pdata)

我应该做 memcopy 还是其他?并刷新 buf?请让我知道我该如何处理。提前致谢...

最佳答案

是的,你可以复制数据:

char* pdata = new char[str_len];
memcpy(pdata, buf, str_len);
pushWork(pdata);

pushWork 端,它必须负责在完成后释放数据:

delete[] pdata;

您还需要考虑将这些全部封装到一个 std::vector 中,这样您就不必担心异常安全:

std::vector<char> data(buf, buf + str_len);
pushWork(data);

在这种情况下,需要修改 pushWork 以获取 std::vector 按值,但好处是它不必担心删除数据完成后,将是完全异常安全的。

关于c++ - 如何复制缓冲区中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com