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/write和fread/fwrite区别
1,fread是带缓冲的,read不带缓冲.
2,fopen是标准c里定义的,open是POSIX中定义的.
3,fread可以读一个结构.read在linux/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
分享到:
相关推荐
任务 I/O系统调用开销比较任务目的: 本任务主要目的在于了解I/O系统调用的特点并通过性能...请分别使用三种方法:(1)标准C的I/O库函数:fopen,fread和fwrite(2)Unix 的I/O函数:open.read 和write(3)Open 和mmap
卷曲fopen、fread、fwrite 等所有函数在许多 C 程序中都很常见并且是标准的“习惯用法”。 通过提供具有与基于文件的版本相同的一般行为的 fcurl* 函数,但允许 URL 以其他方式使用文件名,这是一种尝试,允许现有的...
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; } /*-----------------------创建子目录-------------------...
介绍Linux系统下两种文件编程接口,fopen、fclose、fread、fwrite (适合操作普通文件,C标准函数),open、close、read、write (适合操作设备文件、也可以操作普通文件Linux下接口),介绍目录相关操作函数,Makefile...
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,...
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.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.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 ...
数据块读写函数:fread和fwrite 格式化读写函数:fscanf和fprintf 13.3.1 字符读写函数 1.读字符函数fgetc 规格:int fgetc(FILE * stream); 功能:从指定的文件中读一个字符。 参数:stream为指向文件的指针...
数据块读写函数:freed和fwrite ?格式化读写函数:fscanf和fprinf 下面分别予以介绍。使用以上函数都要求包含头文件stdio.h。字符读写函数fgetc和fputc字符读写函数是以字符(字节)为单位的读写函数。 ...
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 ...
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 ...
//权限级别(1-全部权限2-只能新增和查询3-只能查询) }us[10]={{1,"admin","admin",1},{2,"kinglin","kinglin",2}},Online_User={0,"","",3}; //Oneline为在线用户,可用于权限级别等限制!!! //第三部分:...
所有的 C / C++ 函数 Constructors (cppstring) Constructors (cppvector) Operators (cppbitset) Operators (cppdeque) Operators (cppstack) Operators (cppstring) Operators (cppvector) ...write (cppio)
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 ...
write(将数据写入已打开的文件内) 89 10 文件内容操作篇 89 10.1 89 clearerr(清除文件流的错误旗标) 89 10.2 90 fclose(关闭文件) 90 10.3 90 fdopen(将文件描述词转为文件指针) 90 10.4 90 feof(检查文件...
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标准库源代码\...