当前位置:网站首页>read stream special attention

read stream special attention

2022-08-09 13:43:00 Hong Dayu

如果 read() 没有检索到消息中的所有数据,则剩余数据应留在 STREAM 中,并且可以通过下一次 read() 调用检索.信息-
       丢弃模式还会检索数据,直到传输了所请求的字节数,或者达到了消息边界.然而,未读数据保留在一个
       read() 返回后的消息将被丢弃,并且不能用于后续的 read()getmsg()getpmsg() 调用.

       read() 如何处理零字节 STREAMS 消息由当前的读取模式设置决定.在字节流模式下,read() 将接受数据,直到它读取
       nbyte 字节,或者直到没有更多数据要读取,或者直到遇到零字节消息块.然后 read() 函数应返回的数量
       读取的字节数,并将零字节消息放回 STREAM 上,以供下一个 read()getmsg()getpmsg() 检索.在消息不丢弃模式或消息中
       sage-discard 模式,零字节消息应返回 0,并且该消息应从 STREAM 中删除.当零字节消息作为第一条消息被读取时
       在 STREAM 上,无论读取模式如何,都应从 STREAM 中删除消息并返回 0.

       来自 STREAMS 文件的 read() 应在 STREAM 头读取队列的前面返回消息中的数据,而不管消息的优先级带.

       默认情况下,STREAM 处于控制正常模式,其中来自 STREAMS 文件的 read() 只能处理包含数据部分但不包含
       控制部分.如果在 STREAM 头部遇到包含控制部分的消息,read() 将失败.这个默认动作可以通过放置
       使用 I_SRDOPT ioctl() 命令在控制数据模式或控制丢弃模式下进行 STREAM.在控制数据模式下,read() 应将任何控制部分转换为
       数据并将其传递给应用程序,然后再传递最初存在于同一消息中的任何数据部分.在控制丢弃模式下,read() 将丢弃消息
       控制部分,但将消息中的任何数据部分返回给进程.

       此外,如果 STREAM 头在调用之前处理了异步错误,则 read() 将失败.在这种情况下,errno 的值不应反映
       read() 的结果,但反映了先前的错误.如果正在读取的 STREAM 发生挂起,read() 将继续正常运行,直到 STREAM 头
       读取队列为空.此后,它将返回 0.

       pread() 函数应等效于 read(),除了它应从文件中的给定位置读取而不更改文件指针.首先
       pread() 的三个参数与 read() 相同,只是为文件内的所需位置添加了第四个参数偏移量.尝试执行
       无法查找的文件上的 pread() 将导致错误.

返回值
       成功完成后,这些函数应返回一个非负整数,指示实际读取的字节数.否则,函数应
       返回 -1 并设置 errno 以指示错误.
原网站

版权声明
本文为[Hong Dayu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/221/202208091236553427.html