`

open-fopen read-fread等的不同

阅读更多
open和fopen的区别:
1.缓冲文件系统
缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器而定。
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等是带缓冲的。

2.非缓冲文件系统
缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。本书只作简单介绍。
open, close, read, write, getc, getchar, putc, putchar 等是不带缓冲的。

前者带f的属于高级IO,后者是低级IO。
前者返回一个文件指针,后者返回一个文件描述符(用户程序区的)。
前者有缓冲,后者无缓冲。
高级IO是在低级IO的基础上扩充而来的,在大多数情况下,使用高级IO。

http://blog.chinaunix.net/u/21067/showart_213410.html
open 是系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,
fopen是C的库函数,返回的是一个指向文件结构的指针。

文件描述符是linux下的一个概念,linux下的一切设备都是以文件的形式操作.如网络套接字、硬件设备等。当然包括操作文件。
fopen是标准c函数。返回文件流而不是linux下文件句柄。

设备文件不可以当成流式文件来用,只能用open。
fopen是用来操纵正规文件的,并且设有缓冲的,跟open还是有一些区别。

一般用fopen打开普通文件,用open打开设备文件。

fopen是标准c里的,而open是linux的系统调用,他们的层次不同。
fopen可移植,open不能。

网友认为fopen和open最主要的区别是fopen在用户态下就有了缓存,在进行read和write的时候减少了用户态和内核态的切换,而open则每次都需要进行内核态和用户态的切换;
表现为,如果顺序访问文件,fopen系列的函数要比直接调用open系列快;如果随机访问文件open要比 fopen快。
转自:
http://blog.csdn.net/hairetz/archive/2009/05/05/4150193.aspx

==============================================================

  1,fread是带缓冲的,read不带缓冲. 
  2,fopen是标准c里定义的,open是POSIX中定义的. 
  3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别. 
  4,fopen不能指定要创建文件的权限.open可以指定权限. 
  5,fopen返回指针,open返回文件描述符(整数). 
  6,linux/unix中任何设备都是文件,都可以用open   ,read.

==============================================================

《C专家编程》说主要是涉及到系统。
区别不是缓冲,带f的是标准IO,代码可以移植,不带f只能在UNIX/LINUX系统调用。 
一个是整数,一个是指针。


http://blog.chinaunix.net/u3/94284/showart_1898809.html
分享到:
评论

相关推荐

    read_and_fread.tar.gz

    通过分析这个压缩包中的文件,我们可以学习到如何在C语言中使用`read`和`fread`来读取文件,以及如何配合`open`、`fopen`、`fclose`和`close`进行文件的管理和操作。这些基础知识对于任何C程序员来说都是必备的,...

    c++相关技术 fread

    C++ fread 函数详解 fread 函数是 C++ 语言中...在实际应用中,fread 函数可以用于读取各种类型的文件和流数据,并且可以与其他函数结合使用,例如 fwrite 函数、fseek 函数等,来实现更加复杂的文件操作和数据处理。

    linux中open函数使用

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

    文件系统代码

    int read(char *file); /*------------初始化-----------------------*/ int format() { current = 2; currentPath="C:\\\\"; //当前路径 osPoint->format();//打开文件列表初始化 delete openlist; openlist=...

    file_cp.rar_linux fopen

    while ((bytes_read = fread(buffer, 1, sizeof(buffer), source_file)) > 0) { if (fwrite(buffer, 1, bytes_read, dest_file) != bytes_read) { perror("Error writing to destination file"); fclose(source_...

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

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

    进程之间的调用基于arm开发

    这些函数都是基于系统调用的,例如 `fopen` 函数调用 `open` 系统调用来打开文件,`fread` 函数调用 `read` 系统调用来读取文件。 Unbuffered I/O 函数 Unbuffered I/O 函数是一组系统调用函数,提供了基本的输入/...

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

    - 在实际开发中,应该检查`fopen`、`fread`和`fwrite`等函数的返回值,以确定是否成功执行,失败时应处理异常。 - 使用`ferror`或`feof`检查错误状态,例如在读写过程中是否遇到文件结束或错误。 - 避免内存泄漏...

    windows 操作系统课程设计

    1. **使用标准C的I/O库函数**:包括`fopen`、`fread`和`fwrite`等函数。 2. **使用Unix的I/O函数**:包括`open`、`read`和`write`等函数。 3. **使用`open`和`mmap`**:即通过内存映射的方式来进行文件操作。 每种...

    文件IO_day1.pdf

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

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

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

    Linux环境C程序设计.zip

    - 系统调用是应用程序与操作系统交互的接口,如open、close、read、write等。 - syscalls.h头文件包含了所有系统调用的声明。 以上只是Linux环境下C程序设计的一些基本概念和核心知识点,实际编程中还需要结合...

    使用C语言与python分别实现文件的读写功能

    在C语言中,文件操作主要依赖于标准库`stdio.h`中定义的各种函数,包括文件的打开、读取、写入及关闭等。 1. **打开文件** - 函数:`FILE *fopen(const char *path, const char *mode);` - 参数解释:`path`是...

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

    首先,我们来看看C语言中的标准文件操作函数,包括fopen、fclose、fread和fwrite,这些函数是跨平台的,适用于处理普通文件。fopen用于打开文件,fclose用于关闭文件,fread和fwrite则分别用于读写文件内容。当需要...

    linux,c语言文件系统

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

    嵌入式文件IO编程实验

    例如,`open`, `read`, `write`, `close`等函数就是常用的文件操作系统调用。 - **用户编程接口(API)**:通常指的是库函数,这些函数封装了系统调用,为开发者提供了更高级别的抽象,使得编程更加简单。例如,`...

    linux c 函数参考

    - `stdio.h`:包含了输入/输出操作,如`printf`、`scanf`、`fopen`、`fclose`等,它们是进行文件操作和屏幕打印的基础。 - `stdlib.h`:提供了内存管理(`malloc`、`calloc`、`realloc`、`free`)、数值转换(`...

Global site tag (gtag.js) - Google Analytics