楼主是个linux新菜鸟,目前在做一个linux系统下的视频记录仪,记录H264的视频,简单说就是从网络读取视频流写入固态硬盘,固态硬盘挂载到linux系统的/MNT下,现在有个问题就是屏幕打印实际读取的数据量例如为12345678字节,如果正常接收关闭信号,关闭文件退出系统则固态硬盘里的数据量与实际相差无几,但一旦是直接关电那么固态硬盘内数据就少很多,最多少过50几秒的视频数据,平均码流是1.5mBPS
程序简单历程就是
recv从网络读取 buf【2048】
fwrite讲buf写入已挂载的硬盘里打开的文件
有关机信号
关闭文件,umount,退出系统
linux系统有文件系统缓冲,也就是实际上会写入内存,然后才写入硬盘。固态硬盘按照块去写入,一般一个块有4kb甚至更大。如果你更新这个地址范围内哪怕一个字节,都需要把整个块全部写一次。这不但降低了性能,而且极大造成了固态硬盘不必要的磨损,导致硬盘寿命大大减少。
操作系统的缓存机制使得你对相邻的地址改写后,其实都在内存操作,再一次性写入硬盘,这是一种必要的优化。如果你的linux系统可以配置,你可以想办法关掉缓存,立刻写入数据,但是强烈不推荐你这么做。