C语言——stdio.h
int fgetc(FILE * stream); get character from stream
返回流中的一个字符,并以int的类型返回,如果碰到文件的结尾,或者一个错误发生,函数返回EOF,同时相应的错误或eof指示器被设置,可以用ferror或者feof来检查发生一个错误,或者到达了文件的末尾
int getc(FILE * stream); get character from stream;
功能和fgetc一样,只是getc用宏来实现,因此当传递参数时,不应该是一个表达式,以防止潜在的副作用
int getchar(void); get character from stdin;
从标准输入中读取下一个字符,等价于getc函数中奖参数设置为标准输入。返回值跟fgetc,getc一样。
int putchar(int character); write character to stdout
将字符输出到标准输出中,如果没有错误发生,返回相同的字符,如果错误发生,则返回EOF,同时错误指示器被设置。
char * fgets(char * str, int num, FILE * stream); get string from stream
从流中读字符串,将读到的num-1个字符存放到str所指向的缓冲中。当碰到换行或者EOF时,读结束。但是换行被作为一个有效的字符被读进了缓冲,同 时自动在末尾加上一个NULL。通常num等于缓冲的大小。无错误时,函数返回指向字符串的指针,如果有错误发生则返回null。可以用ferror或 feof来检查是错误发生还是到达了文件结尾。
char * gets(char * str); get string from stdin
从标准输入读字符并将其存放到str中,直到碰到换行\n或者EOF,但是换行符并不读入到str中,这跟fgets不同。而且gets不知道要读多少字符,要特别小心以防止buffer overflow
int fputs(const char* str, FILE * stream); write string to stream
将str所指向的字符串写入到流中,直到字符串中碰到一个null,最后的null不会被写入到流中。成功返回一个非负的整数,错误返回EOF
int puts(const char * str); write string to stdout
将字符串写到标准输出中,并附加一个换行符\n,当第一次碰到字符串中的null时,拷贝停止,null不会被写入到stdout中。
功能跟fputs(str, stdout)类似,但是fputs不附加一个换行符。
int fputc(int character, FILE * stream); write character to stream;
将字符写入到流中,并移动指示器的位置。成功会返回写入的字符,负责返回EOF。
int putc(int character, FILE *stream); write character to stream;
功能跟fputc一样,只是putc用宏来实现。因此要防止潜在的错误发生;
int ungetc(int character, FILE * stream); unget character from stream
将一个字符虚拟的放入到输入流中,位置是上次读字符的位置。文件指示器倒退到前一个位置,因此这个被虚拟放入的字符被下一次的读操作所读到。只所以称之为 虚拟放入,是因为和这个流相关联的文件的内容不会有任何的变化,因此这个操作只影响到下一次的读操作。要虚拟放入的字符可以跟上一次读的字符相同或者不相 同。可以多个字符被虚拟放入。
如果设置了eof,调用这个函数后会将eof清除。fseek,fsetpos,rewind的调用会丢弃放入到流中的虚拟字符。如果要放入的是eof,则操作会失败,输入流不会发生变化。
直接的输入和输出
size_t fread(void * ptr, size_t size, size_t count, FILE * stream); read block of data from stream
read an array of count elements, each one witha size of bytes, from the stream and stores them in the block of memory specified by ptr.
the positon indicator of the stream is advanced by the total amount of bytes read.the total amount of bytes read if successful is (size * count);返回值为读到的element数,如果跟count不相等,则返回错误。
size_t fwrite(count void * ptr, size_t size, size_t count, FILE * stream); write block of data to stream
将内存中的数据写入到流中,返回值为写入的element数,如果不等于count则错误。
流中的位置指示
int fgetpos(FILE * stream, fpos_t position); get current position in stream
得到流目前的指示器,并将其存放到position所指向的对象中,这个只供fsetpos函数使用。成功返回0,否则返回一个错误。
int fsetpos(FILE * stream, const fpos_t pos); set position indicator of stream
改变文件指示器,eof被清除,同时ungetc函数的效果也被清除。on streams open for update(read + write), a call to fsetpos allows to switch between reading and writing.成功返回0,否则返回非零值,同时设置全局的errno,可以用perro来翻译这个值。
int fseek(FILE * stream, long int offset, int origin); repositon stream position indicator;
用offset和origin来共同设置指示器,会清除eof和ungetc函数的效果。在文本文件中使用offset,而不是0或者ftell函数的返回值时,在某些平台上会有一些格式的转换,导致不可预料的位置指示。offset表示number of bytes。SEEK_SET SEEK_CUR SEEK_END
long int ftell(FILE * stream); get current positon in stream
返回目前指示器的值,是个长整型。对于二进制文件,返回从开始到指示器的字节数,对于文本文件不能保证返回的值是正确的字节数,但是返回值仍然可以用在fseek的offset变量中。发生错误会返回-1L,同时设置全局变量errno,可以用perror来扑捉;
void rewind(FILE * stream);set positon indicator to the beginning
等价于fseek(stream, 0L, SEEK_SET),除了rewind会清除错误指示器。
错误处理函数
void clearerr(FILE) ; clear error indicator
reset both error and eof indicator of the stream.通过调用rewind,fseek,fsetpos函数会重新设置指示器
int feof(FILE * stream); check end-of-file indicator
检查是否eof被设置,也就是是否到达文件的末尾,如果是则返回非零值,否则返回0.如果eof被设置,则对stream的进一步操作会失败,除非使用rewind,fseek,fsetpos函数进行重新设置。
int ferror(FILE * stream); check error indicator
检查是否有错误指示器被设置,如果是则返回非零值,否则返回0.
void perror(const char * str); print error message
将全局变量errono的值翻译成字符串,并打印。
常量
EOF
是个非整数,通常有函数调用错误,或者到文件尾时返回。
C语言——stdio.h的更多相关文章
- C语言中头文件<stdio.h>中的#ifndef _STDIO_H_
先了解这里的相关知识:http://www.cnblogs.com/stemon/p/4000468.html 头文件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都in ...
- c语言输入与输出库函数#include<stdio.h>
last modified: 2010-05-28 输入与输出<stdio.h> 头文件<stdio.h>定义了用于输入和输出的函数.类型和宏.最重要的类型是用于声明文件指针的 ...
- include<stdio.h> 和include<iostream.h>的区别
stdio 是C标准库里面的函数库 对应的基本都是标准输入输出等等C语言常用库的定义iostream是C++标准库的头定义, 对应的基本上是C++的输入输出相关库定义开发C程序用Stdio, C++用 ...
- stdio.h及cstdio的区别
2013-07-04 16:45:19 找了很多资料,没有说的很明白的,下面是老外的一篇文章,解释的比较清楚,后面给出翻译. Clarifying stdio.h versus cstdio 转自:h ...
- 学习第一个头文件stdio.h
使用标准输入输出库函数时要用到 “stdio.h”文件,因此源文件开头应有以下预编译命令: #include<stdio.h> stdio是standard input&outup ...
- 走进C标准库(3)——"stdio.h"中的getc和ungetc
接前文. 再来看看getc和ungetc的实现.在看这两个函数的实现之前,我们先来想一想这两个函数分别需要做的工作. int getc(FILE *stream) 说明:函数getc从stream指向 ...
- 走进C标准库(2)——"stdio.h"中的fopen函数
其他的库文件看起来没有什么实现层面的知识可以探究的,所以,直接来看stdio.h. 1.茶余饭后的杂谈,有趣的历史 在过去的几十年中,独立于设备的输入输出模型得到了飞速的发展,标准C从这个改善的模型中 ...
- stdio.h cstdio的区别
stdio.h cstdio string.h cstring math.h cmath .h是c语言的习惯,在c++中,替换为在前面加个c
- #include<stdio.h> #include "stdio.h"
https://baike.baidu.com/item/#include <stdio.h> #include <stdio.h> 编辑 #include<stdio. ...
随机推荐
- 2014年王道论坛研究生机试练习赛(二)set 2 货币问题
题目描述: 已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生.求,至少需要几张货币才能完成支付.如,若支付 ...
- DEMO6:坐标添加文字标签的JavaScript插件
Google地图API MarkerWithLabel Example http://google-maps-utility-library-v3.googlecode.com/svn/tags/ ...
- Nutch 使用总结
Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch使用方法简介: http://blog.csdn.net/pengp ...
- img标签-srcset属性
今天看前辈的代码时,发现img标签有个陌生的srcset属性,如下: 1 <img class="Avatar" src="https://pic3.zhimg.c ...
- IDEA Intellij 打开springboot项目 配置文件无法出现输入提示
需要将java代码和资源文件进行标记
- thinkphp5 邮件发送(qq邮箱为例)
一.首先需要你开启smtp 服务,登录qq邮箱,进入设置 -> 账户 注意: 开启后会生成授权码,一定要记下,两个都记下,登录邮件客户端需要.这里配置邮件发送也需要这个授权码 二. 下载phpm ...
- 【算法】深度优先搜索(DFS)III
1. DFS生成排列 众所周知,1,2…n的排列一共有n!个,因此生成全排列至少需要n!的时间复杂度.如果用循环来生成排列,当n稍大时,内外循环会非常之多.可以用DFS模拟解决,生成0 … n-1的排 ...
- LeetCode——Populating Next Right Pointers in Each Node
Description: Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; Tree ...
- Bettercap的安装和使用嗅探WIFI
一.首先安装bettercap 我这里的环境是ubuntu 16.04 apt-get install build-essential ruby-dev libpcap-dev git ruby ge ...
- java中得到文件MIME类型的几种方法(转)
本文转载自:http://hotsunshine.iteye.com/blog/857485 使用 javax.activation.MimetypesFileTypeMap 需要引入activat ...