linux socket read函数的读取问题

rwjlqn 2009-09-01 01:27:14
用read函数去读取串口数据 为何read函数的第三个参数设置的数越大的时候read到数据就越少呢(第三个数越大,往image.image文件里写入的数据就越少) why? 我读取的内容是传过来的一张jpeg格式的图片内容

while (1)
{
of.open("image.image", ios::app|ios::out);
if (of.is_open())
{
res = read(fd, buf, 1);设置成1的时候读取的数据算是比较完整了
buf[res] = '\0';
string str = buf;
of<<str;
of.flush();
of.close();
}
else
{
cout<<"of open error!!!!!"<<endl;
}
}
...全文
1783 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwjlqn 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 challenge99 的回复:]
不是很明白这里用string
[/Quote]

不用string也一样
challenge99 2009-09-01
  • 打赏
  • 举报
回复
不是很明白这里用string
rwjlqn 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jamesf1982 的回复:]
如果你想一次性多读数据的话,需要设置串口的属性,VMIN和VTIME,可以看一下这个人写的说明。另外读多少个字节还和你的波特率有关

http://blog.chinaunix.net/u/22754/showart_182681.html
[/Quote]
可能我说的不清晰吧 我的波特率是115200了都
我用程序去读的时候 只要传过来的数据不是图片数据的时候 read函数的第三个参数随便设置都可以 唯独当我接收图片数据的时候read函数第三个参数要设置有1才能比较完整的接收图片数据
james_hw 2009-09-01
  • 打赏
  • 举报
回复
如果你想一次性多读数据的话,需要设置串口的属性,VMIN和VTIME,可以看一下这个人写的说明。另外读多少个字节还和你的波特率有关

http://blog.chinaunix.net/u/22754/showart_182681.html
rwjlqn 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jamesf1982 的回复:]
引用 1 楼 zhuxueling 的回复:
你没有检查过返回值。。。你查一下返回值是什么意思就可以了。
(我看见无数位高人,在基本系统调用都没弄明白的情况下去弄串口通信)
(串口只不过是把设备当成文件读而己,把工夫花在这个上,多浪费啊)


顶这个

我不明白楼主说的“read函数的第三个参数设置的数越大的时候read到数据就越少呢”,是每次都读失败么?读失败的话看返回值,如果读到的数据少于你想要的数据,看看串口设置,是不是波特率太小了?另外你想深究的话,可以用串口调试工具看看是不是错包太多了?
[/Quote]
每次读取都不失败 我意思是每次我必须要一个字节一个字节的读取(read函数的第三个参数必须设为1,否则读取的数据就不完整,read第三个参数数值越大,读取的数据就越不完整) 为什么要一个字节一个字节的读取 我不明白? 以前我记得read函数的第三个参数我经常设置成1024的
rwjlqn 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhuxueling 的回复:]
你没有检查过返回值。。。你查一下返回值是什么意思就可以了。
(我看见无数位高人,在基本系统调用都没弄明白的情况下去弄串口通信)
(串口只不过是把设备当成文件读而己,把工夫花在这个上,多浪费啊)
[/Quote]

你的意思是要我查read函数的返回值? 返回值不是每次实际读取的字节数吗 我的意思是为何read函数的第三个参数设置成1的时候比设置成1024等其它数值时所读取的数据多呢? 进一步就是说为何我是一个字节一个字节的接收呢
james_hw 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhuxueling 的回复:]
你没有检查过返回值。。。你查一下返回值是什么意思就可以了。
(我看见无数位高人,在基本系统调用都没弄明白的情况下去弄串口通信)
(串口只不过是把设备当成文件读而己,把工夫花在这个上,多浪费啊)
[/Quote]

顶这个

我不明白楼主说的“read函数的第三个参数设置的数越大的时候read到数据就越少呢”,是每次都读失败么?读失败的话看返回值,如果读到的数据少于你想要的数据,看看串口设置,是不是波特率太小了?另外你想深究的话,可以用串口调试工具看看是不是错包太多了?
zhuxueling 2009-09-01
  • 打赏
  • 举报
回复
你没有检查过返回值。。。你查一下返回值是什么意思就可以了。
(我看见无数位高人,在基本系统调用都没弄明白的情况下去弄串口通信)
(串口只不过是把设备当成文件读而己,把工夫花在这个上,多浪费啊)
Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户 /服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁 信号量 PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V消息队列(一) 消息队列 IPC对象数据结构 消息队列结构 消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V信号量(一) 信

69,371

社区成员

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

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