C++语言学习记录:文件相关的几个问题补充

get() 和getline()

cin.getline()和cin.get()都是对输入进行行的读取,即一次读取一整行而不是单个字符,但是二者仍然有一定区别
cin.get()每次读取一整行并把由enter生成的换行符留在输入队列中,而cin.getline()每次会读取一整行,但是会将enter生成的换行符抛弃

缓存同步的实现

对文件流进行操作时,他们与一个streambuf类型的缓存联系在一起,而这个缓存实际上是一块内存空间,作为流和物理文件的媒介
例如一个输出流中,每一次一个成员函数put被调用(即写入一个字符),这个字符不是直接被写入该输出流所对应的物理文件中,而是首先被插入到该流的缓存中。
当缓存被排放出来时,其中的所有数据若是输出流,就被存储到物理媒介中,输入流的话就被简单抹去,这个过程就称为同步
同步主要发生在

  • 当文件被关闭时:在文件被关闭之前,所有还没有被完全写出或读取的缓存都将被同步。
  • 当缓存满了时:缓存有一定空间限制,当缓存满了后将会被自动同步
  • 当控制符明确指明时:当遇到某些流中特定的控制符时,就会进行同步,比如flush和endl
  • 当明确调用函数sync()时:函数会立即引发同步,函数会返回一个int值,若返回-1则表示流没有联系的缓存或操作失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值