博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Istream中的函数
阅读量:7120 次
发布时间:2019-06-28

本文共 5546 字,大约阅读时间需要 18 分钟。

Istream中的函数
(2011-12-30 16:06:38)
转载▼
标签:
杂谈
   
Istream中一些非常用但很有用的函数。
 
我们常使用>>, getline(),但是其实istream这个类型是提供了很多的其他很有用的函数。
 
我们知道使IO行为成为一种流的方式最本质的特征就是模拟数据向水一样从一个地方流像另外一个地方,所以我们使用>>, getline()操作的时候,就好像前面被操作的数据没有了。其实像istream这样的对象时刻维护着一个指针(streampos),它一般随着对该流的操作而变动,这样就给我们提供了向流水一样的数据传输,但实际上只是有个指针在作用而已。
 
有了这个概念我们就知道了,在IOstream library中,有streamoff,streampos,streamsize,这样的int类型的类型来特别表达有关流的当前操作位置以及长度问题。然后我们知道我们可以通过这些对象给与的一些函数做一些相应的我们要做的是,改变流当前位置。
 
(1)Streamsize  gcount(),返回前一次操作的长度。
(2)取得相应个数的字符
int get();一个字符
istream& get ( char& c );一个字符,存储在c中,返回已经移动了的istream
istream& get ( char* s, streamsize n );n字符,结束字符\n(结束字符不会被取出。
istream& get ( char* s, streamsize n, char delim );结束字符delim
istream& get ( streambuf& sb);
istream& get ( streambuf& sb, char delim );
(3)
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
 
(4)去除n字符(取出,丢弃)
istream&  ignore ( streamsize n = 1, int delim = EOF );
(5)
int peek ( );
与get不同在于streampos不会发生变化。
(6)退回一个stream指针streampos
istream& putback ( char c );
istream& unget ( );
(7)读n个字符,(与get的区别)。
istream& read ( char* s, streamsize n );
streamsize readsome ( char* s, streamsize n );
(8)设置streampos
istream& seekg ( streampos pos );
istream& seekg ( streamoff off, ios_base::seekdir dir );
value
   
offset is relative to...
ios_base::beg
   
beginning of the stream buffer
ios_base::cur
   
current position in the stream buffer
ios_base::end
   
end of the stream buffer
(9)返回当前streampos常用来,计算长度。
streampos tellg ( );
(10)int sync ( );
 
 
可以看出,只有>>, get, read, getline(),这样的函数用于流数据,peek也是只是get pointer不会变。
 
操作get pointer的有gcount(),ignore,putback,unget,seekg,tellg。
对应istream,ostream也有一类函数共使用。
 
(1)       put(对应于get)
ostream& put ( char c );
注意在输出流中,那个位置指针时put point。指针指向的是输出目的文件接受字符的开始位置,要不然会将前面的字符覆盖。
(2)  write(对应于read)
ostream& write ( const char* s , streamsize n );
write没有那么丰富的重载,这表明从一个文件复制数据到另外一个文件只能使用字符数做中间转接。
(3)  seekp,tellp,(对应seekg,tellg)g表示get,p表示put。
(4)  flush,特殊方法,将缓冲区中的数据写入目的流。
 
 
如上所说的这些操作,集中在流的get pointer的操作。一句话,对流的操作不会真的将数据流走,只是get pointer的变动而以。
 
输入输出流会有一个streambuf对象,这个东西非常重要,这些流数据的缓冲地,很多流操作都是以这个对象的操作为基础的!
 
 
 
 
有人说cstdio,与iostream是对应的,对的,但是他们两之间只是从功能上对应的,实现的方法上确实相差太多了。
 
Functions
Operations on files:
remove
   
Remove file (function )
rename
   
Rename file (function )
tmpfile
   
Open a temporary file (function)
tmpnam
   
Generate temporary filename (function)
File access:
fclose
   
Close file (function)
fflush
   
Flush stream (function)
fopen
   
Open file (function )
freopen
   
Reopen stream with different file or mode (function )
setbuf
   
Set stream buffer (function )
setvbuf
   
Change stream buffering (function )
Formatted input/output:
fprintf
   
Write formatted output to stream (function)
fscanf
   
Read formatted data from stream (function )
printf
   
Print formatted data to stdout (function )
scanf
   
Read formatted data from stdin (function )
sprintf
   
Write formatted data to string (function)
sscanf
   
Read formatted data from string (function )
vfprintf
   
Write formatted variable argument list to stream (function)
vprintf
   
Print formatted variable argument list to stdout (function)
vsprintf
   
Print formatted variable argument list to string (function)
Character input/output:
fgetc
   
Get character from stream (function)
fgets
   
Get string from stream (function )
fputc
   
Write character to stream (function)
fputs
   
Write string to stream (function)
getc
   
Get character from stream (function)
getchar
   
Get character from stdin (function)
gets
   
Get string from stdin (function )
putc
   
Write character to stream (function)
putchar
   
Write character to stdout (function)
puts
   
Write string to stdout (function)
ungetc
   
Unget character from stream (function)
Direct input/output:
fread
   
Read block of data from stream (function)
fwrite
   
Write block of data to stream (function)
File positioning:
fgetpos
   
Get current position in stream (function)
fseek
   
Reposition stream position indicator (function)
fsetpos
   
Set position indicator of stream (function)
ftell
   
Get current position in stream (function)
rewind
   
Set position indicator to the beginning (function)
Error-handling:
clearerr
   
Clear error indicators (function)
feof
   
Check End-of-File indicator (function)
ferror
   
Check error indicator (function)
perror
   
Print error message (function)
 
Macros
EOF
   
End-of-File (constant)
FILENAME_MAX
   
Maximum length of file names (constant)
NULL
   
Null pointer (constant)
TMP_MAX
   
Number of temporary files (constant)
And also _IOFBF, _IOLBF, _IONBF, BUFSIZ, FOPEN_MAX, L_tmpnam, SEEK_CUR, SEEK_END and SEEK_SET, each described with its corresponding function.
Types
FILE
   
Object containing information to control a stream (type )
fpos_t
   
Object containing information to specify a position within a file (type)
size_t
   
Unsigned integral type (type)
 
可以看到,在C中由于没有类的概念,顶多只有type,于是所有的方法都是纯方法,并没有类对象的依托,这是cstdio,与iostream.fstream.sstream之间的区别。
不过,cstdio仍然为我们提供了一些非常有用和底层的函数。
 
 
 
 (1)前面介绍iostream时我们说再C IO中,只有对设备和文件的两种IO。是的。于是首先操作文件是cstdio的一个很大部分的功能,这里操作文件与使用流的方式读文件的数据无关。
包括删除、新建、重命名等等。
(2)格式化输入输出printf,scanf这样的函数则是我们常见的一种输入输入方法,格式一词体现了他们与纯输入输出(只是将数据都出来,以字节为单位)。
Printf,sanf这样这是一个特殊的专门用于给stdin和stdout输入输出。
Fprintf,fsanf这样的则是为一般的刘进行输入输出的。
Sprint,ssanf这样的这时面向字符串的输入输出(或许这里就是C++建立string流的灵感)。
还有vfprintf,vspintf,vprintf。这样的可以写一个列表的。
(3)除了上面对各种类型数据的格式化输入输出,还有针对字符串输入输出。
其中的函数基本与格式化输入输出对应。
 
(4)非格式化的,也就是直接写读的方法fread,fwrite。
这些方法其实都是针对文件的(文件包括设备),所以以stdio中以f开头的都是这一类,它们将文件看成一种流的格式(  不想C++那样需要特意声明出一个流对象)。
(5)与C++中一样,流是一种错觉,只是安排了某种特殊的指使位置来做到这一点,在C++中这种指示叫着,get pointer,在C中叫着position。
(6)与C++中流对象的三种状态(eof,bad,fail)以及状态操作对应,C中也有类似的方法来操作流的状态。
 
分享: [分享到新浪Qing] 分享到新浪Qing
0
喜欢
阅读(572)┊ 评论 (0)┊    收藏(0) ┊转载(0)    ┊ 喜欢▼ ┊打印┊举报
已投稿到:    
[排行榜] 排行榜 [圈子] 圈子   
前一篇:Visual studio 和Visual C++
后一篇:C++IO的讨论
你可能感兴趣的文章
BaaS API 设计规范
查看>>
【AI学霸榜】世界名校十大学霸获200万奖金,NLP、CV等四大领域学术秘籍曝光
查看>>
从源码分析常见的基于Array的数据结构动态扩容机制
查看>>
How to safely shut down a loading UIWebView in viewWillDisappear?
查看>>
xugang 记录一个.NET 程序员的成长 asp.net水晶报表的一些问题
查看>>
perl的几个小tips
查看>>
[转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
查看>>
T-Sql(一)简单语法
查看>>
SharePoint 2013 Step by Step——How to Create a Lookup Column to Another Site(Cross Site) 阅读目录...
查看>>
《天风文章》 V1.1.0设计文档
查看>>
重新认识javascript的settimeout和异步
查看>>
Servlet
查看>>
10 款最新的 jQuery 内容滑块插件
查看>>
【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。...
查看>>
jsp页面中使用超链接标签<a>中的属性<href>和<onclick>同时触发怎么执行
查看>>
【原创】数据挖掘案例——ReliefF和K-means算法的医学应用
查看>>
zookeeper编程入门系列之zookeeper实现分布式进程监控和分布式共享锁(图文详解)...
查看>>
回复《论WEB标准专家》。
查看>>
Module-Zero之组织单元(OU)管理【新增】
查看>>
前几天入手一大菠萝,写个初始化教程
查看>>