`
izuoyan
  • 浏览: 8881522 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

fopen /open,read/write和fread/fwrite区别

 
阅读更多

fopen /open区别

UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write
这里简单的介绍一下他们的区别。
1. fopen
系列是标准的C库函数;open系列是 POSIX 定义的,是UNIX系统里的system call
也就是说,fopen系列更具有可移植性;而open系列只能用在 POSIX 的操作系统上。
2.
使用fopen 系列函数时要定义一个指代文件的对象,被称为文件句柄file handler),是一个结构体;而open系列使用的是一个被称为文件描述符file descriptor)的int型整数。
3. fopen
系列是级别较高的I/O,读写时使用缓冲;而open系列相对低层,更接近操作系统,读写时没有缓冲。由于能更多地与操作系统打交道,open系列可以访问更改一些fopen系列无法访问的信息,如查看文件的读写权限。这些额外的功能通常因系统而异。
4.
使用fopen系列函数需要"#include <sdtio.h>";使用open系列函数需要"#include <fcntl.h>" ,链接时要之用libc-lc
小结:
总的来说,为了使程序获得更好的可移植性,未到非得使用一些fopen系列无法实现的功能的情况下,fopen系列是首选。

read/writefread/fwrite区别

1,fread是带缓冲的,read不带缓冲.
2,fopen
是标准c里定义的,openPOSIX中定义的.
3,fread
可以读一个结构.readlinux/unix中读二进制与普通文件没有区别.
4,fopen
不能指定要创建文件的权限.open可以指定权限.
5,fopen
返回指针,open返回文件描述符(整数).
6,linux/unix
中任何设备都是文件,都可以用open,read.
如果文件的大小是8k
你如果用read/write,且只分配了2k的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。
如果你用fread/fwrite,则系统自动分配缓存,则读出此文件只要一次系统调用从磁盘上读出。
也就是用read/write要读4次磁盘,而用fread/fwrite则只要读1次磁盘。效率比read/write要高4倍。
如果程序对内存有限制,则用read/write比较好。
都用fread fwrite,它自动分配缓存,速度会很快,比自己来做要简单。如果要处理一些特殊的描述符,read write,如套接口,管道之类的
系统调用write的效率取决于你buf的大小和你要写入的总数量,如果buf太小,你进入内核空间的次数大增,效率就低下。而fwrite会替你做缓存,减少了实际出现的系统调用,所以效率比较高。
如果只调用一次(可能吗?),这俩差不多,严格来说write要快一点点(因为实际上fwrite最后还是用了write做真正的写入文件系统工作),但是这其中的差别无所谓。

http://blogold.chinaunix.net/u3/94284/showart_1898809.html

分享到:
评论

相关推荐

    windows 操作系统课程设计

    任务 I/O系统调用开销比较任务目的: 本任务主要目的在于了解I/O系统调用的特点并通过性能...请分别使用三种方法:(1)标准C的I/O库函数:fopen,fread和fwrite(2)Unix 的I/O函数:open.read 和write(3)Open 和mmap

    fcurl:fcurl - 使用 libcurl 进行 URL 操作的 fopen、fread、fwrite 样式函数

    卷曲fopen、fread、fwrite 等所有函数在许多 C 程序中都很常见并且是标准的“习惯用法”。 通过提供具有与基于文件的版本相同的一般行为的 fcurl* 函数,但允许 URL 以其他方式使用文件名,这是一种尝试,允许现有的...

    Vxworks学习笔记

    25 read/write、fread/fwrite、fopen/open有什么区别 96 26 快速启动??????????????? 100 27 启动时报ATA0a和硬盘启动相关问题 100 28 如何安装USB2.2新版本及编译USB驱动? 101 29 WindML、图形界面相关问题 102 ...

    文件系统代码

    fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp); printf("----------------------------------------------------------\n\n"); return 1; } /*-----------------------创建子目录-------------------...

    14.Linux开发-文件目录操作介绍、创建BMP图片.pdf

    介绍Linux系统下两种文件编程接口,fopen、fclose、fread、fwrite (适合操作普通文件,C标准函数),open、close、read、write (适合操作设备文件、也可以操作普通文件Linux下接口),介绍目录相关操作函数,Makefile...

    w_crt:linux 系统 (x86) 上的示例 c 运行时库

    i/o operations(open, read, write, seek, close, fopen, fread, fwrite, fseek, fclose) . 3. process opeartions(fork, getpid, getppid, waitpid, exit). 4. string opeartions(printf, itoa, strlen, strcpy,...

    Linux程序设计中文第4版.part3

     3.4.1 write系统调用 82  3.4.2 read系统调用 83  3.4.3 open系统调用 84  3.4.4 访问权限的初始值 85  3.4.5 其他与文件管理有关的系统调用 88  3.5 标准I/O库1  3.5.1 fopen函数1  ...

    Linux程序设计中文第4版.part2

     3.4.1 write系统调用 82  3.4.2 read系统调用 83  3.4.3 open系统调用 84  3.4.4 访问权限的初始值 85  3.4.5 其他与文件管理有关的系统调用 88  3.5 标准I/O库1  3.5.1 fopen函数1  ...

    Linux程序设计中文第4版.part1

     3.4.1 write系统调用 82  3.4.2 read系统调用 83  3.4.3 open系统调用 84  3.4.4 访问权限的初始值 85  3.4.5 其他与文件管理有关的系统调用 88  3.5 标准I/O库1  3.5.1 fopen函数1  3.5.2 ...

    13.第十三章 文件.txt

    数据块读写函数:fread和fwrite 格式化读写函数:fscanf和fprintf 13.3.1 字符读写函数 1.读字符函数fgetc 规格:int fgetc(FILE * stream); 功能:从指定的文件中读一个字符。 参数:stream为指向文件的指针...

    C语言程序设计标准教程

    数据块读写函数:freed和fwrite ?格式化读写函数:fscanf和fprinf  下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。字符读写函数fgetc和fputc字符读写函数是以字符(字节)为单位的读写函数。 ...

    Linux程序设计 第4版.haozip01

    3.4.1 write系统调用 82 3.4.2 read系统调用 83 3.4.3 open系统调用 84 3.4.4 访问权限的初始值 85 3.4.5 其他与文件管理有关的系统调用 88 3.5 标准i/o库 91 3.5.1 fopen函数 91 3.5.2 fread函数 92 3.5.3 ...

    Linux程序设计 第4版.haozip02

    3.4.1 write系统调用 82 3.4.2 read系统调用 83 3.4.3 open系统调用 84 3.4.4 访问权限的初始值 85 3.4.5 其他与文件管理有关的系统调用 88 3.5 标准i/o库 91 3.5.1 fopen函数 91 3.5.2 fread函数 92 3.5.3 ...

    myktv源代码

    //权限级别(1-全部权限2-只能新增和查询3-只能查询) }us[10]={{1,"admin","admin",1},{2,"kinglin","kinglin",2}},Online_User={0,"","",3}; //Oneline为在线用户,可用于权限级别等限制!!! //第三部分:...

    c/c++函数库说明(api)html版

    所有的 C / C++ 函数 Constructors (cppstring) Constructors (cppvector) Operators (cppbitset) Operators (cppdeque) Operators (cppstack) Operators (cppstring) Operators (cppvector) ...write (cppio)

    The Art of Assembly Language Programming

    You are visitor as of October 17, 1996. The Art of Assembly Language Programming &lt;br&gt;Forward Why Would Anyone Learn This Stuff? 1 What's Wrong With Assembly Language 2 What's Right With ...

    linux_c API函数大全

    write(将数据写入已打开的文件内) 89 10 文件内容操作篇 89 10.1 89 clearerr(清除文件流的错误旗标) 89 10.2 90 fclose(关闭文件) 90 10.3 90 fdopen(将文件描述词转为文件指针) 90 10.4 90 feof(检查文件...

    C标准库源代码(学习C/C++必备)

    C标准库源代码\FWRITE.C C标准库源代码\FWSCANF.C C标准库源代码\GCVT.C C标准库源代码\GETCH.C C标准库源代码\GETCWD.C C 标准库源代码\GETENV.C C标准库源代码\GETPATH.C C标准库源代码\GETPID.C C标准库源代码\...

Global site tag (gtag.js) - Google Analytics