Tag: seek

lseek / write突然返回-1,errno = 9(错误的文件描述符)

我的应用程序使用lseek()来寻找写入数据的所需位置。 使用open()成功打开文件,我的应用程序能够多次使用lseek()和write() 。 在给定的时间,对于某些用户而且不易重现, lseek()返回-1, errno为9.在此之前文件未关闭且文件句柄(int)未重置。 在此之后,创建另一个文件; open()再次没问题, lseek()和write()再次工作。 更糟糕的是,这个用户再次尝试了完整的序列,一切都很顺利。 所以我的问题是,操作系统可以出于某种原因为我关闭文件句柄吗? 什么可能导致这个? 某种文件索引器或文件扫描程序? 解决这个问题的最佳方法是什么? 这个伪代码是最好的解决方案吗? (别介意代码布局,会为它创建函数) int fd=open(…); if (fd>-1) { long result = lseek(fd,….); if (result == -1 && errno==9) { close(fd..); //make sure we try to close nicely fd=open(…); result = lseek(fd,….); } } 有人遇到过类似的经历吗? 总结:对于给定的fd,文件搜索和写入工作正常,并且没有理由突然返回errno = 9。

FFMPEG寻求带来音频伪像

我正在使用ffmpeg实现音频解码器。 在阅读音频甚至寻找已经有效的时候,我无法找到一种方法来清除缓冲区后寻求所以当应用程序在搜索后立即开始读取音频时我没有任何文物。 avcodec_flush_buffers似乎对内部缓冲区没有任何影响。 所有解码器(mp3,aac,wma,…)都会出现此问题,但PCM / WAV(由于未压缩音频,因此不使用内部缓冲区来保存数据以进行解码)。 代码片段很简单: av_seek_frame(audioFilePack->avContext, audioFilePack->stream, posInTimeFrame, AVSEEK_FLAG_ANY); avcodec_flush_buffers(audioFilePack->avContext->streams[audioFilePack->stream]->codec); 解释: audioFilePack->avContext = FormatContext audioFilePack->stream = Stream Position (also used to read audio packets) audioFilePack->avContext->streams[audioFilePack->stream]->codec = CodecContext for the codec used 关于我应该做什么的任何想法,我可以寻求并获得没有剩余音频? 谢谢!