linux串口读取read函数始终返回值为1,没有返回读到的字符数

winmenaruto 2011-04-14 09:28:44
我把读函数放在一个线程里边,代码如下:

char buf[1024];
while(a=read(c,buf,6)>0)
buf[a+1]=0;


照道理是read返回读到的字符数,我用这个字符数,给buf一个结尾。。之前用也是好的,read字符也能读到,读10个,20个都没有问题。。。但是返回值就是1 请高手指教为什么这样了
我串口是 :O_RDWR |0_NONBLOCK打开的 ,raw模式
...全文
1264 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjianxinxh 2011-04-14
  • 打赏
  • 举报
回复
这个貌似和你的等待时间是有关系的,我记得有个select函数的,你可以找个例子看一下。
justkk 2011-04-14
  • 打赏
  • 举报
回复
这个是否与串口的读写模式有关?
抱歉,没搞过串口
winmenaruto 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justkk 的回复:]

你这样的话,相当于把read的返回值与0比较的结果赋值给a了

修改为:while((a=read(c,buf,6))>0)
[/Quote]
还有请问,我放在线程里边收串口,受到的数据都是断断续续的。。有时候当中部分先收到,然后收到了头。。
这问题有人提过:http://topic.csdn.net/u/20070801/19/bd9a2829-3c24-42af-8ac6-0e6a78218fba.html
我的解决方式是一次读一个字节,这样应该保险的,但是收到的还是断断续续的。。

char buf[1024],*p;
p=buf;
while(1)
p=buf;
while((a=read(port0,p,1))>0)
{p++;}
*++p=0;
}
justkk 2011-04-14
  • 打赏
  • 举报
回复
你这样的话,相当于把read的返回值与0比较的结果赋值给a了

修改为:while((a=read(c,buf,6))>0)
winmenaruto 2011-04-14
  • 打赏
  • 举报
回复
int read(int fd, *buffer,length);
参数说明:
(1).int fd:文件描述符
(2).*buffer:数据缓冲区
(3).length:要读取的字节数
函数返回值:
读操作成功读取返回读取的字节数,失败则返回-1。
winmenaruto 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justkk 的回复:]

扫了一眼,这个死循环是干啥的??
while(1)
{ p=buf;
[/Quote]

while(1)
p=buf;
while((a=read(port0,p,1))>0)
{p++;}
*++p=0;
}
漏了个{
justkk 2011-04-14
  • 打赏
  • 举报
回复
扫了一眼,这个死循环是干啥的??
while(1)
p=buf;
winmenaruto 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jinjianxinxh 的回复:]

这个貌似和你的等待时间是有关系的,我记得有个select函数的,你可以找个例子看一下。
[/Quote]
windows 下面倒是弄得好好的。。。没有这种事情的

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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