首页 > 代码库 > LINUX原始IO和标准IO

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实现的。

LINUX原始IO和标准IO