运维开发网

getline over socket

运维开发网 https://www.qedev.com 2020-06-13 20:46 出处:网络 作者:运维开发网整理
是否有一个libc函数可以执行与getline相同的操作,但是可以使用连接的套接字而不是FILE *流吗? 解决方法是在套接字上调用fdopen.在这样做的时候应该注意什么.做什么/不做的原因是什么. 这样做的一个明显原因是调用getline和co,但是重写一些自定义getline可能是个更好的主意吗? 当你在套接字上调用read时,它可以提前返回零值. 例如. read(fd, buf, buf
是否有一个libc函数可以执行与getline相同的操作,但是可以使用连接的套接字而不是FILE *流吗?

解决方法是在套接字上调用fdopen.在这样做的时候应该注意什么.做什么/不做的原因是什么.

这样做的一个明显原因是调用getline和co,但是重写一些自定义getline可能是个更好的主意吗?

当你在套接字上调用read时,它可以提前返回零值.

例如.

read(fd, buf, bufsize)

如果tcp套接字的内核缓冲区已满,则可以返回小于bufsize的值.

在这种情况下,可能需要再次调用读取函数,除非它返回零或负结果.

因此最好避免使用stdio功能.你需要为read函数创建包装器,以便实现迭代调用read以便可靠地获取bufsize字节.只有当无法从套接字读取更多字节时,它才应返回零值,就像从本地磁盘读取文件一样.

你可以在Randal Bryant的书中找到包装纸Computer Systems: A Programmer’s Perspective.

源代码可在this站点获得.寻找以rio_开头的函数.

0

精彩评论

暂无评论...
验证码 换一张
取 消