Linux串口读二进制文件读不完整,而.c和.txt文件都可以正常从串口读取

printf("readytoreceivefile...\n");tcgetattr(fd,&opt);cfmakeraw(&opt);//tcflush(fd,TCI... printf("ready to receive file...\n");
tcgetattr(fd,&opt);
cfmakeraw(&opt);

// tcflush(fd,TCIOFLUSH);
set_Parity(fd,8,1,'n');

opt.c_cc[VTIME] = 0;
opt.c_cc[VMIN] = 1;
cfsetispeed(&opt,B115200);
cfsetospeed(&opt,B115200);

tcsetattr(fd,TCSANOW,&opt);

printf("ready for receving data...\n");

// retv = fread(hd,1,max_buffer_size,fp);
retv = read(fd,hd,max_buffer_size);
printf("retv is : %d\n",retv);
while(retv>0)
{
printf("receive data size=%d\n",retv);
ncount+=retv;
printf("ncount: %d\n",ncount);
if(retv>1 && hd[retv-1]!='\0')//there hava a problem
fwrite(hd,retv,1,fp);
else if(retv>1 && hd[retv-1]=='\0')
{
fwrite(hd,retv-1,1,fp);
break;
}
else if(retv==1 && hd[retv-1]=='\0')
break;
retv=read(fd,hd,max_buffer_size);
}
printf("the received data size is:%d\n",ncount);
printf("\n");
flag_close=close(fd);
展开
 我来答
jiangtao9999
2015-04-08 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:44%
帮助的人:8226万
展开全部
检查串口的工作模式。
我记得串行有一种 7bit 的传输模式,这个模式下,只能传输 7bit 的数据,对应的就是 ASCII 文本,二进制传输都会出问题。
其实,你也可以完全不考虑传输模式的问题。发送数据时,用 base64 编码,收到数据后再解码就 OK 了。这样 base64 数据完全都是 7bit 的。
更多追问追答
追问
谢谢你,但我已经设置为8bit的传输模式了,二进制文件的读写怎样操作比较好,我还是按照处理字符的形式来读写,最后设置结束位为'\0'。没有其他的思路,跪求指教
追答
二进制里面 \0 也是可能存在的,所以你设置任何结束位都可能导致出问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式