如果串口打开后,不对其执行关闭操作,会有什么后果呢?
下次打开 串口的时候 会提示被占用,以后可以直接对串口进行读写操作
今天看到一个程序,是在一个子线程里面,
首先打开串口:fd=open_com(****);
紧接着是: if(fd<0){报错}
然后是: while(1){***}
之后是一个: if(close_com(***)=-1){报错}
我感觉最后那个关闭串口的操作是不是执行不到那里?前面是个死循环呢。
那如果程序由于某种原因重新启动,是不是会出现错误?
引用: 引用 5 楼 xh_jj 的回复:
今天看到一个程序,是在一个子线程里面,
首先打开串口:fd=open_com(****);
紧接着是:? if(fd <0){报错}
然后是:? ? while(1){***}
之后是一个: if(close_com(***)=-1){报错}
我感觉最后那个关闭串口的操作是不是执行不到那里?前面是个死循环呢。
那如果程序由于某种原因重新启动,是不是会出现错误?
if(close_com(***)=-1){报错} 这句话肯定执行不到啊,你可以在主线程关闭的时候终止这个子线程,并将串口端口关闭。
while(1){***}
里面有break或者goto否
串口编程在kenrel的本质是文件系统层+串口芯片驱动层, 在kernel里面你可以看到其实所谓的open和close对应到串口芯片地驱动里面地代码只是把串口芯片地收发中断使能和关闭. 但是既然串口作为一个设备, 当然要遵从设备文件地基本属性, 看设备打开时用的参数. open后如果不关导致地后果你前面地写和后面地写会叠加输出. 前面的读和后面的读则会看输入数据进入串口接收buffer的时机.
下次再用找开命令时,会提示串口占用.不执行打开命令,则可直接收发数据.
引用: 引用 10 楼 xh_jj 的回复:
倒是有break,但我理解的是这也只能跳出本次循环,开始下一次while()的判断,不知对不对?
break直接就跳出while循环了,contiue才是跳出本次循环。
引用: 引用 14 楼 feihu521a 的回复:
break直接就跳出while循环了,contiue才是跳出本次循环。
这个break好像只能跳出switch,跳不出while(1)