一.他们的差异便是一个(read)是UNIX 中的系统调用,是类UNIX系统,供应给程序员操作文件的接口(要不然你如何操作文件呢);而其余一个(fread)则是C措辞供应的读取文件的函数库,自然这个函数库(ANSI)的实现因此对应的系统调用为根本的。
二.fread有缓冲(准确的说法是缓冲的空间不同)
这里说缓冲,实在read函数也有缓冲(但是很多人说没有,根据资料,read是系统函数,而内核在读取硬盘(外设设备)时,自己也会缓冲读写),但是fread缓存在用户空间,而read是缓存在内核。以是如果利用read读一个文件时,常日须要更多的访问cpu,而fread可以较少访问cpu次数,进而提高效率。以是,如果文件须要进用户程序,你一样平常利用fread较好,而你只是纯挚地复制的话,便是从这块磁盘到另一块磁盘,那就一样平常是利用read较好,由于这样可以避免数据进入用户空间,内核直接实现,效率更高。

fread和read的不同点
1)
read/write 操作文件描述符 (int型)fread/fwrite 操作文件流 (FILE型)
2)fread/fwrite 调用 read/writeread/write是系统调用,要自己分配缓存,也便是说效率要自己根据实际情形来掌握。fread/fwrite是标准输入/输出函数,不须要自己分配缓存,对付一样平常情形具有较高的效率。
格式差异read:
ssize_t read(int fd ,void buf, size_t count);
read用于从文件描述符对应的文件读取数据,调用成功返回读出的字节数;buf为读出数据的缓冲区,count为每次读取的字节数,出错返回-1,EOF返回0。
例如:一个文件大小600字节,每次读取400字节,则第一次读取返回400,第二次读取返回200,并且要把稳如果buf为一个数组,每次读取的count最大为sizeof(buf)-1,由于字符串结尾标志为‘\0’,占用一个字节,否则会涌现乱码。
fread:
size_t fread(void ptr,size_t size,size_t nmemb,FILE stream);
ptr为指向缓冲区保存或读取的数据。
size为掌握记录大小。
nmemb为记录数。
函数返回读取或回写的记录数。
例如:
char buf[100];
size_t temp=fread(buf,10,1,p);
这个语句表示,每次读取10个字节到buf里边(10×1),如果读取的字节数少于10个返回0,因此,如果想知道读取文件的详细字节数,须要将上边的语句改为:
size_t temp=fread(buf,1,10,p);
用法差异
效率:fread为封装好的库函数,而read为系统函数,一样平常来说,fread效率更高。读取文件差别:fread功能更强大,可以的构造体的二进制文件。如果底层的操作,用到文件描述符,用read更好。