linux环境下有一句话:一切都是文件。确实很有道理,基本的操作方式:open,read,write,close对开发者来说几乎没有什么差别。
但是,普通文件和驱动文件还是有些许不同。
普通文件是有缓冲的,当我们写文件时,会先写入缓冲区。当出现以下情况时会写入文件中
1.缓冲区慢 2.ffush刷新缓冲区 3.回车换行
新手开始写程序时,向文件里面写入数据,但是打开文件时显示为空。就是这个问题。
驱动文件不一定有缓冲。大部分的char型驱动是没有缓冲的。网卡驱动有系统缓存。当我们向网卡驱动写数据时,操作系统将数据从用户空间copy到内核空间的驱动缓冲中,
如果缓冲区满会返回错误。所以当发送大数据时,如高清视频数据时 应该将系统缓冲区设置为合适大小(setsockopt)。对于没有缓冲区的驱动文件,write read数据是直接
与设备交互的。
可以通过setbuf设置文件流的缓冲。: void setbuf(FILE *steam, char *buf);为了关闭缓冲,可以将buf参数设置为NULL。