`

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
分享到:
评论

相关推荐

    文件系统代码

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

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

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

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

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

    windows 操作系统课程设计

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

    The Art of Assembly Language Programming

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

    psnr_ssim_analyzer.exe

    size_t bytes_read = fread(result_frame, 1, frame_size, input_file); if (bytes_read != static_cast(frame_size) && ferror(input_file)) { fprintf(stdout, "Error while reading frame no %d from file %s...

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

     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 fread函数2  3.5.3 ...

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

     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 fread函数2  3.5.3 fwrite函数2  3.5.4 fclose函数2  ...

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

     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 fread函数2  3.5.3 ...

    也谈截取首页新闻 – 范例

    本程序采用的是后者。应该说,容错性能比较好。 <? $open = fopen(...//网页地址 $read = fread($open, 15000); fclose($open); $search = eregi("<!– Start in the news –>(.*)<!– End in the n

    文件整体打包

    file.Open(this->m_path + strTitle,CFile::modeRead | CFile::typeBinary)) { AfxMessageBox(strTitle + "打开失败"); return; } /*获取文件名长度跟文件大小*/ filelen = file.GetLength(); filenamelen ...

    C语言程序设计标准教程

    从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。  普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序; 也可以是一组待输入...

    PHP 读取文件内容代码(txt,js等)

    */ function read_file_content($FileName) { //open file $fp=fopen($FileName,”r”); $data=””; while(!feof($fp)) { //read the file $data.=fread($fp,4096); } //close the file fclose($fp); //...

    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,...

    libpmx:多边形模型扩展示例库

    // Open example model in binary read mode if ( pmx_file ) { char header[PMX_HEAD_LEN]; float version; fread( header, PMX_HEAD_LEN, 1, pmx_file ); // Read the header version = pmx_header_version( ...

    13.第十三章 文件.txt

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

    一个进程池的服务器程序

    while((count = fread(content, 1, sizeof(content), fp)) > 0) { //printf("%s", content); if (write(connfd, content, count) != count) { printf("write failed\n"); } } fclose(fp); close(connfd); ...

    Vxworks学习笔记

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

    myktv源代码

    //Oneline为在线用户,可用于权限级别等限制!!! //第三部分:人员管理 void user_menu(struct user *show_user); void user_add(struct user *show_user); void user_find(struct user *show_user); void ...

    Linux程序设计 第4版.haozip01

    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 fwrite函数 92 3.5.4 fclose函数 92 3.5.5 ...

Global site tag (gtag.js) - Google Analytics