文件读写IO
摘要:本文主要总结了以下有关文件读写的IO,系统调用与库函数。
1.初级IO函数:close,creat,lseek,open,write
文件描述符是一个整型数
1.1close
1.2int creat(const char * pathname, mode_t mode);
1.3off_t lseek(int fildes,off_t offset ,int whence)
定义函数
函数说明
参数
返回值
1.4int open(const char *pathname, int flags);
1.5ssize_t write (int fd,const void * buf,size_t count);
返回值:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。
0)非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度 快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。
1)关于系统调用
read和write属于初级读写函数,也是系统调用;系统调用需要消耗大量时间。因为代码执行权会从用户转移到内核,执行内核代码是需要时间的。系统调用开销巨大,因为系统调用需要特殊的内存和堆栈环境,这些需要在系统调用之前建立好;系统调用之后又需要恢复这些环境。这种环境切换需要耗费大量时间。最好的方法就是建立缓冲区,一次读取大量数据,避免多次进行系统调用。我们可以用这个思想来改造前一篇中的who。
2)系统调用的错误处理
一般约定,系统调用open,write,lseek在出错时会返回值-1。另外,系统调用都有自己的错误集,以open为例,打开文件不存在,没有读的权限,打开文件太多等等。内核通过全局变量errno来确定错误类型,其中哦功能error.h中规定了一些错误的宏。
2.标准IO函数
2.1int fclose(FILE *stream);
如果流成功关闭,fclose 返回 0,否则返回EOF(-1)
2.2int feof(FILE *stream)
feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
2.3int fgetc(FILE *stream);
这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。
2.4char *fgets(char *buf, int bufsize, FILE *stream)
fopen从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。bufsize的作用是防止缓冲区溢出。
2.5FILE * fopen(const char * path,const char * mode);
文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
2.6int fputc (int n, File *fp)
功能:输出一个字符到某个文件
2.7size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
2.8int fseek(FILE *stream, long offset, int fromwhere);
2.9size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream)
2.10int getc(FILE *stream);
注意: 此函数被ISO C声明为一个宏,所以在用时不能将其做为函数指针传(有一些编译器将其以函数形式也给另说)。
2.11getchar()
从stdio流中读字符,相当于getc(stdin),它从标准输入里读取下一个字符。
2.12gets
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
2.13int fputc(char ch,FILE*fp)
putc()与fputc()等价。不同之处为:当putc函数被定义为宏时,它可能多次计算stream的值。
2.14 int putchar(int ch);
在标准输出上输出一个字符
2.15int puts(char *string);
功能:送一字符串到流stdout中
缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。
3.格式化输出输出函数
3.1printf
3.2int fprintf(FILE *stream,char *format,[argument])
功能:格式化输出到一个流/文件中;
返回值:fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
3.3scanf
3.4int fscanf(FILE *stream, char *format,[argument...]);
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
文件读写IO的更多相关文章
- Windows Phone 八、文件读写IO
文件存储的类型 •本地应用文件: •ApplicationData.Current.LocalFolder: •漫游应用文件: •ApplicationData.Current.RoamingFold ...
- 【java学习笔记】文件读写(IO流)
1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...
- 快速入门Python中文件读写IO是如何来操作外部数据的?
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- 文件读写io操作范例
系统io读写,copy int main(int argc, char **argv) { if(argc != 3) { printf("Usage: %s <src> ...
- [ Skill ] 文件读写 & IO 句柄
https://www.cnblogs.com/yeungchie/ 在 Skill 中使用一种叫做 ioport 类型的变量来操作文件.不过我一般更习惯称为 IO 句柄 (IO/File Handl ...
- 【Python】[IO编程]文件读写,StringIO和BytesIO,操作文件和目录,序列化
IO在计算机中指Input/Output,也就是输入和输出. 1.文件读写,1,读文件[使用Python内置函数,open,传入文件名标示符] >>> f = open('/User ...
- JAVA之IO文件读写
IO概述: IO(Input output)流 作用:IO流用来处理设备之间的数据传输 ...
- Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化
IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...
- IO编程(1)-文件读写
文件读写 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接 ...
随机推荐
- JavaScript学习总结(二)
JavaScript学习总结(二) ---- 对象 在JavaScript中,几乎用到的每个js都离不开它的对象.下面我们深入了解一下js对象. js中对象的分类跟之前我们学过的语言中函数的分类一样, ...
- js jsp 时间 日期 控件 插件 简单 实用
js时间控件一般都是找网上的用,这东西平常很少涉及到,一用到找起来却烦死人,不是没用就是太复杂,今天向大家推荐一个简单实用的控件,该控件在不断更新,而且有专门的网站对它进行维护,所以值得一看. 先说它 ...
- [CSAPP笔记][第十章 系统级I/O]
第十章 系统级I/O 输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程. 高级别I/O函数 scanf和printf <<和>> 使用系统级I ...
- 短信猫编程的一些资料1(At指令发送短信)
现在正在做TC35的项目, 下面分享一下这几天在网上找到的资料: 手机 SMS PDU 格式参考手册 1.相关的GSM AT指令 与SMS有关的GSM AT指令(from GSM0 ...
- EF中的TPH、TPT、TPC
1. Table Per Hierarchy(TPH):只建立一个表,把基类和子类中的所有属性都映射为表中的列2. Table Per Type(TPT):为基类和每个子类建立一个表,每个与子类对应的 ...
- 8 Hbase get方式获取数据
package com.hikvision.hbase.vertify.test; import org.apache.hadoop.conf.Configuration; import org.ap ...
- sql建立跨服务器链接
select srvname,* from master.dbo.sysservers //创建linkServer exec sp_addlinkedserver 'srv_lnk',' ...
- 自定义View—绘制基本图形
一.Canvas能够绘制哪些图形 二.
- 阿铭linux笔记
2015-09-06虚拟机网络设置.wmv: curl 获取在命令行显示的网页 dhclient 分配ip地址 ifdown eth0 关闭网卡eth0 ifup eh0 ...
- 网上查了点关于windows注册表的知识,发现基本名词没理解好,于是整理这篇笔记(可能个别地方不准确,先这么理解吧),有了这个理解,再去看网上的文章,就差不读了
打开注册表编辑器,左边窗格中显示的是“注册表项”,右边窗格中显示的是“注册表项的项值” 子项:子项是相对父项而言的,在某一个项(父项)下面出现的项(子项) 值项:一个项可以有一个或多个项值,当前被使用 ...