标准IO函数以及基本知识点总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
标准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中最经常使⽤的操作之中的⼀个。