当前位置: 技术问答>linux和unix
liunux c 程序 异常卡死
来源: 互联网 发布时间:2015-10-24
本文导语: 各位大侠: 我有一个linux下的c写的服务程序,主要充当其它系统接口的转发器, 其中有一段程序循环取'行'数据, 但很奇怪取到101行完后,程序被卡在'取行函数'前面, 再也不走了, (我原来还...
各位大侠:
我有一个linux下的c写的服务程序,主要充当其它系统接口的转发器,
其中有一段程序循环取'行'数据,
但很奇怪取到101行完后,程序被卡在'取行函数'前面, 再也不走了,
(我原来还以为是死循环) ,用gdb看了一下, 根本就不再进入'取行函数'
有哪个大侠碰到过类似的问题,给我提个醒, 谢谢了
我有一个linux下的c写的服务程序,主要充当其它系统接口的转发器,
其中有一段程序循环取'行'数据,
但很奇怪取到101行完后,程序被卡在'取行函数'前面, 再也不走了,
(我原来还以为是死循环) ,用gdb看了一下, 根本就不再进入'取行函数'
有哪个大侠碰到过类似的问题,给我提个醒, 谢谢了
|
既然你是转发器,没必要动态增加缓冲。
可以用队列,两个线程,一个收一个发,队列满了就不收,当然发送端就出错了。
不要无限制的增加缓冲。
你可以动态增加一些临时缓存,队列满的时候放在临时缓存里面,再来一个线程
负责把临时缓存的东西加到队列里面。
可以用队列,两个线程,一个收一个发,队列满了就不收,当然发送端就出错了。
不要无限制的增加缓冲。
你可以动态增加一些临时缓存,队列满的时候放在临时缓存里面,再来一个线程
负责把临时缓存的东西加到队列里面。
|
可以使用再分配的机制。可是我觉得既然是内部的程序,最好是先分配一个最大的内存。或者将信息的长度也传过来,用malloc分配。
|
像这样的取行函数都是要睡眠的, 没有取到行就死在那了.
|
有没有使用同步机制了?
文件是一种资源,会经历使用和释放的过程。会不会资源被其它使用者获取?
文件是一种资源,会经历使用和释放的过程。会不会资源被其它使用者获取?
|
取行函数被阻塞啦,你是不是读取缓冲区是不是太大,没有读完,在等待。
你可以试试一个一个字符去读,或者select方式去读。
你可以试试一个一个字符去读,或者select方式去读。
|
你构造一个文件至少有101行,试下。
然后再跟踪,自然就会明白
然后再跟踪,自然就会明白
|
把code贴出来看看三。
|
还是贴代码好。一目了然。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。