linux下read返回的问题

seforna 2009-04-20 11:16:45
read调用在正常情况下,返回读取到的字节数,在错误的情况下返回-1,并设置全局的errno。
但是在read调用的过程中如果有信号使得调用中断,除了设置errno==EINTR外,返回值是多少呢??
我得到的返回值是65535呢?read是被SIGALRM中断的。
...全文
970 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
piginthetree 2009-04-21
  • 打赏
  • 举报
回复
附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。
seforna 2009-04-21
  • 打赏
  • 举报
回复
谢谢2楼,我用一个unsigned int去接收,宏定义弄乱了,搞定。
morris88 2009-04-20
  • 打赏
  • 举报
回复
我在楼上说的“一定小于0” 不对。

一般来说,它应该返回在中断时已经读取到的数据长度;但是,某些设备不一定按照这个实现的,它会返回一个小于0的整数,指示有错误发生了...
morris88 2009-04-20
  • 打赏
  • 举报
回复
当被中断时,返回值是多少取决于设备的具体实现。
不过,不管是多少,它一定都小于 0...
  • 打赏
  • 举报
回复
附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。

。。楼主很强大,人为得可以中断read过程,如果数据不是很大的数量级,read过程很快就结束了。

SIGALRM中断,如果没有错误的话,应该是中断时候的读取大小,你贴测试代码来看看。
brookmill 2009-04-20
  • 打赏
  • 举报
回复
根据手册的说法,这种情况返回值还是-1
65535,如果作为16位整数正好是-1,是巧合吗?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧