`
izuoyan
  • 浏览: 9215705 次
  • 性别: 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

分享到:
评论

相关推荐

    内存映射与查找物理地址答疑1

    fread和read函数的区别在于,fread是C库函数,而read是系统调用。fread函数是包装了read函数的参数不同。 解决方法:使用FILE * restrict fd; fd = fopen("/proc/logadd2phyadd","rb+");open read write close都要...

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

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

    linux中open函数使用

    open 函数与 read, write 等函数配合使用,而 fopen 函数与 fread, fwrite 等函数配合使用。在大多数情况下,使用 fopen 函数。 open 函数是 Linux 中一个基本的文件操作函数,用于打开或创建文件,并返回一个文件...

    Vxworks学习笔记

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

    掌握系统调用与标准I/O:Linux系统编程精要

    系统调用I/O函数:深入学习open、close、read、write等基本I/O函数,理解文件描述符的概念及其在系统调用中的关键作用。 系统调用与内核:探索系统调用的内部机制,包括软件中断、系统调用号的使用,以及如何在用户...

    操作系统实验报告23.pdf

    1. 使用标准C的I/O库函数fopen、fread和fwrite。这些函数用于打开、读取和写入文件。通过调整文件指针的位置,读取文件内容,逆序后重新写入。 2. 使用Linux的I/O函数open、read和write。这些函数直接操作文件描述符...

    VS2010 MFC读写文件

    而CStdioFile 类是基于标准C库的stdio.h,它提供了一些与fopen/fread/fwrite/fclose等函数相似的功能,适合处理文本文件。 进行文件读写操作时,首先要打开文件。使用CFile的成员函数Open(),传入文件路径、访问...

    Unix I/O 小结

    stdio库提供了缓冲化的读写操作,如fopen、fread、fwrite、fflush等。缓冲I/O在读取时会先从内核缓冲区读取数据到用户缓冲区,再通过stdio接口传递给应用;写入时则相反,先在用户缓冲区积累数据,再一次性写入内核...

    LinuxC语言开发

    3.4 文件操作:打开、读写、关闭文件,熟悉fopen/fread/fwrite/fclose等函数。 3.5 进程管理:fork、exec、waitpid等函数,实现进程创建、通信和同步。 3.6 线程编程:线程创建、同步和通信,如pthread_create、...

    这是一个关于 matlab 的 打开和写入的简单程序,This is an open matlab and write about the simple procedure

    在"open2.m"和"dataread.m"中,我们可能看到`fopen`用于打开文件,`fclose`用于关闭文件,`fprintf`用于向文件写入格式化的文本,而`fscanf`则用于从文件读取数据。 2. **文件指针**:`fopen`函数返回一个文件句柄...

    Linux API速查手册.pdf

    - POSIX的`open/read/write/lseek/fcntl/dup` 提供低级文件操作。 4. **文件操作**: - `chown/rename` 改变文件所有者和重命名文件。 - `stat/basename/dirname` 分别获取文件状态、基础名和目录名。 5. **...

    VC实现读写文件的三种方法

    在C或C++中,可以使用`open()`函数打开文件并获取文件描述符,然后使用`write()`和`read()`函数进行数据的读写。对于二进制文件,需在打开文件时指定`O_BINARY`标志,避免行结束符转换。例如: ```c++ int fd = open...

    Linux C大文件的创建和读写速率

    在32位系统中,标准的`stdio.h`库函数如`fopen`、`fwrite`和`fread`受限于2GB文件大小。为处理大于2GB的文件,我们需要使用低级别的I/O接口,如`open`、`write`和`read`,这些函数不受文件大小限制。 2. **文件...

    对文件操作的方法总结.pdf

    `open()`函数打开文件,`write()`和`read()`函数执行相应的写入和读取操作。在C++中,需要包含`&lt;fstream.h&gt;`头文件。`OnWrite()`和`OnRead()`函数使用这些类来完成文件操作。 3. **API函数实现**: Windows API...

    linux,c语言文件系统

    - 在执行效率上,通常`fread()`和`fwrite()`比`read()`和`write()`稍微快一些,因为它们使用了缓冲机制。 - `fread()`和`fwrite()`支持更丰富的错误检查机制,因此在实际开发中更为常用。 - 使用`time`命令可以比较...

    unix平台下C语言高级编程指南

    还有fopen/fread/fwrite/fclose等C库函数作为封装,提供更友好的接口。 2. 进程控制:fork创建子进程,exec系列函数(如execl、execv)用于替换当前进程空间执行新的程序。wait/waitpid用于父进程等待子进程结束。 3...

    C/C++/VC++文件操作

    - 在MFC应用中,可以利用MFC的`CFile`类简化文件操作,它提供了许多方便的成员函数,如`Open`、`Read`、`Write`和`Close`。 - MFC中的`CFileDialog`类可以帮助用户选择文件,使得应用程序更加用户友好。 总的来说...

    文件IO_day1.pdf

    Linux文件I/O提供了一些库函数,例如open、read、write等。 5.Linux输出机制 Linux输出是带缓冲区机制的,输出的信息先写入缓冲区,然后再输出到终端。缓冲区满时,统一输出到终端。行缓冲输出只要有\n, 就输出...

    Linux系统程序设计_文件IO例程

    在Linux中,文件I/O主要依赖于C语言的标准库函数,如`&lt;stdio.h&gt;`中的`fopen()`、`fprintf()`、`fread()`、`fwrite()`、`fclose()`等,以及`&lt;unistd.h&gt;`中的低级I/O函数,如`open()`、`read()`、`write()`、`close()`...

    windows 操作系统课程设计

    2. **读取和写入**:使用`read`和`write`函数代替`fread`和`fwrite`进行数据的读写操作。 3. **文件操作**:整体流程与方法一类似,但在具体函数的使用上有所不同。 #### 方法三:使用`open`和`mmap` 使用内存映射...

Global site tag (gtag.js) - Google Analytics