标准IO函数以及基本知识点总结
什么是标准IO呢?有哪些特点?
标准IO是标准c库提供的对文件操作的函数接口。他的特点是:1 带缓存,2 大部分都调用系统接口函数实现。(c库就是一种实现好的函数接口,作用是屏蔽下层细节。提供上层接口。提高移植性)
我们都知道标准IO是带有缓存的,那么缓存分为几种呢?
1>全缓存:
有4096byte,截止条件有三,一是缓存满的时候,二是调用fflush的时候,三是进程正常结束的时候
2>行缓存:
有1024byte,它与全缓存截止的条件最大的差异就是另外遇到'\n'的时候。
3>不缓存:
0byte。每次都是直接调用系统接口。
那么说道标准IO就一定要提到 流 了,什么是流?
流 就是将要操作文件的地址,对一个文件操作,首先肯定要打开一个文件,所以流就是在调用fopen函数时所返回的分配内存的首地址。当然也就是将操作文件的地址。
标准IO的几个经常使用函数:
1》fopen()
函数原型 FILE *fopen(const char *path,const char *mode);
当中,path是我们要打开的流,而mode就是我们打开文件的方式了,也就决定你所打开的文件将被如何的去对待啦,有例如以下几种方式:
"r":仅仅读方式打开,打开的文件必须存在。
"r+" :读写方式打开,文件必须存在。
"w" : 仅仅写方式打开,文件不存在则创建。文件存在则清空。
"w+" : 读写方式打开,文件不存在则创建,文件存在则清空。
"a" : 仅仅写方式打开,追加的方式写到文件的尾部。文件不存在则创建。
"a+": 读写方式打开,文件不存在创建,从头開始读,从尾開始写。
以上就是经常使用的fopen的打开方式,这个必须尽量的熟记于心,才干挥斥方遒。游刃有余(诗性大发了)。。。
2》单个字符的读写函数fgetc() fputc()
int fgetc(FILE *stream)
函数功能:从指定的流中读取一个字符。 成功返回读取的字符,读到文件结尾或者失败则返回EOF(-1)
这里面须要注意的就是,返回的数值是整形的。想想为什么呢? 呵呵 。。想不通的留言给我哈O(∩_∩)O哈。
int fputc(int c,FILE* stream)
函数功能: 向指定的流中写入一个字符。成功返回写入的字符,失败返回EOF.
3>多个字符的读写函数fgets() fputs()
char * fgets(char *s,int size,FILE *stream)
函数功能:从流中最多读取size-1个字符到s保存的地址,成功返回读入字符串的地址。失败或读到文件的尾部则返回NULL,为什么最多读取 size -1 个字符呢? 首先fgets函数遇到换行符的时候就会自己主动停止,所以我们也能够利用这一点,来统计文件的行数。另外每次读取结束的时候,会自己主动的在字符的后面加上一个'\0',这就是问题的答案。你造吗?
int fputs( const char *s,FILE*stream)
函数功能: 将一个字符串写入文件,s为字符串的首地址,stream为将要写进去的文件。成功则返回写入字符的个数,失败返回-1 , 他的特点是 将字符串写入文件的时候,遇到‘\0' ,字符则结束。
4》fread() fwrite()
size_t fread(void *ptr,size_t size,size_t nmemb,FILE*stream)
功能:从一个指定的流中读取nmemb个对象,每一个对象的大小事size个字节。成功返回读取实际对象的个数(nmemb) 。 失败返回0.
size_t fwrite(const void *ptr ,size_t size,size_t nmemb , FILE*stream)
功能:向一个指定的流中写nmemb个对象。
另外,当我们在读或者写文件的时候。内核中的文件表项中会存在有offset值,它的值记录的是对文件对应操作的位置。位置非常重要的。比方你对一个文件 读或写之后。然后对文件開始写或读,你假设在这个中间没有更新你的offset值。或导致你的操作得不到你终于想要到那个结果。所以offset的值至关重要。在程序中我们能够使用fseek这个函数来实施对offset值得改动设定,
int fseek ( FILE*stream,long offset,int whence)
功能:实现文件定位,更改内核中文件表项offset的值,成功返回0。失败返回-1.
long offset 来设定偏移量,正数代表向后偏移。负号则向前偏移,whence有三个值:SEEK_SET表示从头開始,SEEK_CUR表示从当前的位置。SEEK_END表示从尾部開始。
另外再加入一个:
文件描写叙述符:
文件描写叙述符是由无符号整数表示的。进程用它来标示打开的文件,内核利用文件描写叙述符来訪问文件,打开现存文件或新建文件时,内核会返回一个文件描写叙述符,读写文件也须要使用文件描写叙述符来指定待写的文件。
通常。标准输入的文件描写叙述符是 0 。标准输出的文件描写叙述符是1 ,标准出错的文件描写叙述符是2,接下来假设再打开文件的时候。文件描写叙述符的分配原则就是未使用的最小的数字。
依据传说:
基于文件描写叙述符的操作是linux中最经常使用的操作之中的一个
标准IO函数以及基本知识点总结的更多相关文章
- 第3章 文件I/O(8)_贯穿案例:构建标准IO函数库
9. 贯穿案例:构建标准IO函数库 //mstdio.h #ifndef __MSTDIO_H__ #define __MSTDIO_H__ #include <unistd.h> #de ...
- UNIX高级环境编程(7)标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流
1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. ...
- UNIX高级环境编程(6)标准IO函数库 - 流的概念和操作
标准IO函数库隐藏了buffer大小和分配的细节,使得我们可以不用关心预分配的内存大小是否正确的问题. 虽然这使得这个函数库很容易用,但是如果我们对函数的原理不熟悉的话,也容易遇到很多问题. 1 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
- linux标准IO缓冲(apue)
为什么需要标准IO缓冲? LINUX用缓冲的地方遍地可见,不管是硬件.内核还是应用程序,内核里有页高速缓冲,内存高速缓冲,硬件更不用说的L1,L2 cache,应用程序更是多的数不清,基本写的好的软件 ...
- linux标准io的copy
---恢复内容开始--- 1.linux标准io的copy #include<stdio.h> int main(int argc,char **argv) { if(argc<3) ...
- (九)errno和perror、标准IO
3.1.6.文件读写的一些细节3.1.6.1.errno和perror(1)errno就是error number,意思就是错误号码.linux系统中对各种常见错误做了个编号,当函数执行错误时,函数会 ...
- C5 标准IO库:APUE 笔记
C5 :标准IO库 在第三章中,所有IO函数都是围绕文件描述符展开,文件描述符用于后续IO操作.由于文件描述符相关的操作是不带缓冲的IO,需要操作者本人指定缓冲区分配.IO长度等,对设备环境要求一定的 ...
- 为什么需要标准IO缓冲?
(转)标准I/O缓冲:全缓冲.行缓冲.无缓冲 标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数.它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的 ...
随机推荐
- UVa-213-信息解码
这题的话,我们只要理解题意,应该就不算很难. 我们可以开一个二维数组,用来存放对应的编码字符,第一个下表是length,第二个下标是value,这样一来,我们在读入数据的时候就进行处理,然后想要使用的 ...
- mysql存储过程详解及基于PHP使用实例
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- Re:从零开始的Linux之路(杂谈)
决定认真从零开始写一个Linux的学习过程,像我这么偷懒的人能写文字记录已经很不容易了,希望不要半途而废吧(拖走) 用多了Linux其实发现,要是哪天Linux和Windows能结合下就好了,简单粗暴 ...
- mysql常见监控项
1.MySQL服务运行状态 约定所有MySQL服务都必须以ip1(内网ip)来绑定,每个机器只有一个ip1,可以有多个端口,即多个MySQL Server.采集程序读取ip端口信息文件来判断serve ...
- spring cache redis
一.使用开源包(spring-data-redis) 1.引入jar包 <dependency> <groupId>org.springframework.data& ...
- 大数据学习——sqoop导入数据
把数据从关系型数据库导入到hadoop 启动sqoop 导入表表数据到HDFS 下面的命令用于从MySQL数据库服务器中的emp表导入HDFS. sqoop import \ --connect jd ...
- zoj 2104 Let the Balloon Rise
Let the Balloon Rise Time Limit: 2 Seconds Memory Limit: 65536 KB Contest time again! How excit ...
- POJ-1236 Network of Schools,人生第一道Tarjan....
Network of Schools 题意:若干个学校组成一个计算机网络系统,一个学校作为出发端连接着若干个学校,信息可以传送到这些学校.被链接的学校不需要再次与出发端相连,现在问你:A:最少选几个学 ...
- 九度oj 题目1086:最小花费
题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下: 距离s 票价 0<S<=L1 ...
- hdu6073[dfs+删边] 2017多校4
题目中对二分图的定义十分特殊, 指的是 U,V两部分中,U的顶点度数必定为2,V中顶点无限制. 题目要求的是 对于所有匹配,该匹配的权值=该匹配中选中的边的边权的乘积,求所有匹配权值之和. 对于V中的 ...