是否有一个 libc 函数可以执行与 getline 相同的操作,但可以使用连接的套接字而不是 FILE * 流?
解决方法是在套接字上调用 fdopen。这样做的时候需要注意哪些事项。这样做/不这样做的理由是什么。
这样做的一个明显原因是调用 getline 和 co,但也许重写一些自定义 getline 是一个更好的主意?
当您在套接字上调用读取时,它可能会过早返回零值。
例如。
read(fd, buf, bufsize)
如果 tcp 套接字的内核缓冲区已满,则可以返回小于 bufsize 的值。
在这种情况下,可能需要再次调用读取函数,除非它返回零或负结果。
因此最好避免使用 stdio 函数。您需要为 read 函数创建包装器,以便实现对 read 的迭代调用,从而可靠地获取 bufsize 字节。仅当无法从套接字读取更多字节时,它才应返回零值,就像从本地磁盘读取文件一样。
你可以在书中找到包装计算机系统:程序员的视角 http://csapp.cs.cmu.edu/public/ics/io/iofunctions.ppt作者:兰德尔·布莱恩特。
源代码位于this http://www.cs.cmu.edu/afs/cs/academic/class/15213-f04/code/csapp.c地点。查找以 rio_ 开头的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)