我有一个 Linux 文件描述符(来自套接字),我想读取一行。 如何用 C++ 实现?
最佳答案
如果您正在从 TCP 套接字读取数据,您无法假设何时会到达行尾。 因此你需要这样的东西:
std::string line;
char buf[1024];
int n = 0;
while(n = read(fd, buf, 1024))
{
const int pos = std::find(buf, buf + n, '\n')
if(pos != std::string::npos)
{
if (pos < 1024-1 && buf[pos + 1] == '\n')
break;
}
line += buf;
}
line += buf;
假设您使用“\n\n”作为分隔符。 (我没有测试那个代码片段 ;-) )
在 UDP 套接字上,那就是另一回事了。发射器可以发送一个包含整行的 paquet。接收方保证将 paquet 作为一个单元接收。如果接收到它,UDP 当然不如 TCP 可靠。
关于c++ - 如何准确阅读一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583353/