read()和fread()的区别 |
您所在的位置:网站首页 › c语言read和del › read()和fread()的区别 |
当我们在linux系统下写程序的时候,经常会读文件或者写文件,既然要操作文件,就会用文件操作函数,其中涉及读写的不乏有read/write或者fread/fwrite,但是我们应该选择哪一种呢,少安毋躁,在决定选用哪一种之前,先让我们看看它们有哪些不同点,然后再做决定,你说呢? 一、 fread和read的不同点 1) read/write 操作文件描述符 (int型) fread/fwrite 操作文件流 (FILE*型) 2) fread/fwrite 调用 read/writeread/write是系统调用,要自己分配缓存,也就是说效率要自己根据实际情况来控制。 fread/fwrite是标准输入/输出函数,不需要自己分配缓存,对于一般情况具有较高的效率。
二、 实例分析: 2.1 待测文件,大小是8K,如图1 。 图1 说明:待测文件可以用自动生成,或者手动编辑一个,最好是尝试用前者。
2.2 用read读取待测文件test.txt 通过分析计算,如果用read读待测文件,且只分配2K的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。 好的,接下来我们通过实例来验证,验证程序代码如图2 图2 编译运行,通过结果验证,如图3、图4、图5、图6 图3 图4 图5 图6 说明:上面的输出结果,是预先在验证程序里写好的。用strace命令跟踪验证如下: 图7 图8 图9 图10 2.3 用fread读取待测文件test.txt 如果用fread/fwrite,则系统自动分配缓存(一般大于8K),则读出此文件只要一次系统调用从磁盘上读出。也就是用read/write要读4次磁盘,而用fread/fwrite则只要读1次磁盘。效率比read/write要高4倍。如果程序对内存有限制,则用read/write比较好。
验证程序代码如图11 图11 编译运行结果如图12,验证结果 图12
用strace命令跟踪验证如图13 图13以上即为今天对这两种读文件方式的实例分析,接下来我会继续做写文件的分析。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |