在C中,当从套接字文件描述符读入缓冲区时,如果检测到分隔符,如何使读取停止?我们假设分隔符是'>'字符。
<schema xmlns="http://purl.oclc.org/dsdl/schematron"
queryBinding="exslt"
xml:lang="en">
<ns uri="http://www.w3.org/1999/xlink" prefix="xlink"/>
<ns uri="http://exslt.org/regular-expressions" prefix="regexp"/>
<pattern id="funding_info">
<title>Make sure funding-source does not happen inside p</title>
<assert test="regexp:test(current(), '^C.+$')">
EC-CHECK: Nao deve haver 'funding-source' nem 'award-id' dentro de 'p'
</assert>
</rule>
</pattern>
</schema>
答案 0 :(得分:5)
这里有两个选项:
read
。答案 1 :(得分:2)
read()
函数不会检查它将数据从源传输到缓冲区的数据。您不能强制它停止传输特定字符或字符的数据(如果它不会在那里停止)。
另一方面,重要的是要认识到read()
不一定读取在任何情况下指定的完整字节数。一方面,这意味着您需要准备好在循环中运行read()
调用以收集您期望的所有数据,但另一方面,这意味着您通常可以期望read()
已经传输了至少一个字节,然后当没有更多数据可立即传输时它将返回。因此,如果发件人在分隔符后停止发送数据,那么read()
可能会在该分隔符后停止读取。
如果您不能依赖发送方根据需要分解传输,那么您可以选择一次读取一个字节。然而,这可能非常低效。更常见的解决方案是分两个阶段完成工作:(1)从内核执行快速,逐块read()
到用户空间缓冲区,然后(2)通过用户空间代码解析缓冲区内容。这基本上是使用缓冲区时可读C流的作用。