LINUX原始IO和标准IO
linux编程中有两类IO, 一类是标准库提供的IO函数fopen, fread , fwrite. 一类是系统接口函数 read ,write等。本文说明两类IO的区别和联系。
区别:
首先看一下两类IO函数的定义:
fread: size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
read : ssize_t read (int fd, void *buf, size_t count);
1. fread 需要传入文件指针从该文件指针读取数据,read函数从一个整形文件描述符读取数据。
以标准输入为例,fread 需要传入stdin 文件指针作为参数,read 需要传入STDIN_FILENO.
2.fread 函数有缓存的功能,read函数没有缓存的功能 , 这意味着read
fread 调用 read 系统接口API从内核读取一块大的数据至库提供的缓存,然后再从该缓存读取数据(size字节)复制到用户提供的buffer。
read 只从内核中读取固定的count字节
3.fread只能从文件读取数据,read 是从文件描述符读取数据,文件描述符不一定代表文件,可以是socket 或者 管道.
4. 头文件不一样,read 的头文件是<fcntl.h> <sys/types.h>,<sys.stat.h> ,<unistd.h>
fread的头文件stdio.h代表从文件流中读取数据
联系:
fread函数属于c标准库函数,其功能是调用系统接口read实现的。