当前位置: 技术问答>linux和unix
程序执行到read的时候不动了是怎么回事?
来源: 互联网 发布时间:2016-02-15
本文导语: 大家好,我又来了,呵呵。 前几天在“内核与驱动研究区”问了200多分的问题,终于把comedi驱动给装上去了,今天运行程序的时候又遇到问题了,再来问一下。 具体是这样的,我终于找到comedi设定板卡采样率的函数...
大家好,我又来了,呵呵。
前几天在“内核与驱动研究区”问了200多分的问题,终于把comedi驱动给装上去了,今天运行程序的时候又遇到问题了,再来问一下。
具体是这样的,我终于找到comedi设定板卡采样率的函数了,设定好之后,通过comedi_fileno()得到一个read和write能识别的整型描述符(integer descriptor ),然后通过read(comedi_fileno(dev),buf,BUFSZ)读取数据。
可是每次执行到read这一句的时候就卡着不动了,不管是我自己写的程序还是comedi提供的示例程序,都是这样,用GDB调试过,可是我只会几个简单的操作,一路“S”到这一步,发现程序执行不动了,也就没有办法了。
各位高手帮忙看看,这个可能是什么问题?或者可以用什么方法调试来查找问题呢?
前几天在“内核与驱动研究区”问了200多分的问题,终于把comedi驱动给装上去了,今天运行程序的时候又遇到问题了,再来问一下。
具体是这样的,我终于找到comedi设定板卡采样率的函数了,设定好之后,通过comedi_fileno()得到一个read和write能识别的整型描述符(integer descriptor ),然后通过read(comedi_fileno(dev),buf,BUFSZ)读取数据。
可是每次执行到read这一句的时候就卡着不动了,不管是我自己写的程序还是comedi提供的示例程序,都是这样,用GDB调试过,可是我只会几个简单的操作,一路“S”到这一步,发现程序执行不动了,也就没有办法了。
各位高手帮忙看看,这个可能是什么问题?或者可以用什么方法调试来查找问题呢?
|
read默认的是阻塞方式读取数据.
你可以在open是加参数 O_NONBLOCK把它设置成非阻塞型,或则用select,来处理
你可以在open是加参数 O_NONBLOCK把它设置成非阻塞型,或则用select,来处理
|
你可以用select加以一个timeout的值, 每次读之前先select一下,
确保有数据可读。 select回阻塞到有数据为止。 它不用轮询的方式来看数据有无,所以也不会浪费CPU时间。
确保有数据可读。 select回阻塞到有数据为止。 它不用轮询的方式来看数据有无,所以也不会浪费CPU时间。
|
你要read的那个缓存中没有数据吧.
|
阻塞了吧