文件I/O与标准I/O

时间:2022-05-21 14:13:03
希望明白的人给我讲一讲他们俩的区别,目前我知道大概的。也就是标准I/O有缓冲区(非内核级的)。我想具体了解一下这两种I/O的优缺点,什么时候应该使用那种I/O,
有了文件I/O为什么有要写了一个标准I/O?

23 个解决方案

#1


因为他们设备不一样,文件io针对的是文件,标准io是对控制台。因为设备特性不一样,必须有不同api访问才最高效

#2


这个也不是他们的“优缺点”决定你选择哪个io,你需要使用文件就得使用文件io,如果你使用控制台,就得标准io

#3


只是这样而已,标准IO是针对控制台,文件IO是针对文件操作的。

#4


2楼3楼说的比较清楚了 
LZ不妨这样想
文件IO的时候就是把文件当成控制台用 只不过输入输出都是在文件里 而不是在控制台里的  
这样类比不一定贴切  不过理解起来容易些

#5


从名字上来区分,文件I/O主要针对文件操作,读写硬盘等,标准I/O,主要是打印输出到屏幕等..

#6


UP

#7


标准IO的推出就是为了统一吧,原来各种操作系统对于文件,设备什么的操作都不统一的,有缓冲没缓冲,各家不同的。

#8


楼上的几位,标准I/O不是也可以用于读取和写入文件吗? 怎么觉得你们没说到点子上。

#9


等待大家的探讨,怎么没有人出来讨论一下呢?

#10


继续等权威的解答。。。。。。。。。。。。。。。

#11


我的理解
标准I/O  就是只要是标准C,就要实现一样接口的标准I/O

而文件I/O各平台系统可能不一样

#12


标准IO是针对控制台,文件IO是针对文件操作的,知道这个对编程没有什么影响了.

#13


能不能再精细一点给我为什么要有标准I/O,文件I/O为什么不能满足控制台需求?

#14


用文件的时候就用文件I/O
    用控制台就用标准I/O!

#15


标准I/O是标准,有了标准I/O就不用知道内部是怎么实现的了
文件I/O是各个系统对文件操作的封装

区别基本上就是缓冲区的问题,标准I/O都有缓冲区,但是文件I/O不一定有

就像Windows为什么还要有文件的API一样

通常情况下个人认为都使用标准I/O就够了

#16


建议楼主去看看 深入理解计算机系统 一书,里面有一章讲这个。
关于文件IO和标准IO,区别就是前者有缓冲区,效率更高,因为后者需要更多的系统调用,
大多数情况下,使用文件IO效率更高。但是在网络编程时,应该使用标准IO,那本书上讲了具体原因,我还没看懂,这里就不讲了。

#17


学习,帮顶

#18


标准IO是针对控制台,文件IO是针对文件操作的。区别基本上就是缓冲区的问题,标准I/O都有缓冲区,但是文件I/O不一定有。

#19


不同情况下有不同的用处  编程选择多一些

#20


引用楼主 wanghaoming100 的回复:
希望明白的人给我讲一讲他们俩的区别,目前我知道大概的。也就是标准I/O有缓冲区(非内核级的)。我想具体了解一下这两种I/O的优缺点,什么时候应该使用那种I/O,
有了文件I/O为什么有要写了一个标准I/O?


其实楼主应该只问带缓冲和不带缓冲的IO
就拿磁盘IO来说
带缓冲的IO可以提高对硬件的写入效率,并减少对硬件的损害吧,这样的缓冲区是由标准库分配的。对文件的读写都是都这个缓冲区的读写,该缓冲区的数据何时写入磁盘那是由标准库控制。当然程序员自己也可以控制是否写入磁盘。

如果使用不带缓冲的IO的话,每次都读写操作都是针对磁盘本身的,这样的坏处就是每次读写的速度慢,读写的频率高。同时对硬件的损害也比较大。其实读写的效率方面,好像也不是就一定低于带缓冲的IO的。只要程序设计的当,效率还是很高的。好像APUE中说到过这个问题。如果想了解这些,可以去看看APUE。

#21


引用 5 楼 oyljerry 的回复:
从名字上来区分,文件I/O主要针对文件操作,读写硬盘等,标准I/O,主要是打印输出到屏幕等..

#22


最主要还是有无缓冲, 比如说对一些低速设备可能使用标准IO效率更高
而对于高速设备可能没有明显区别,要么就是像上面的朋友所说,读写太频繁,会对设备有损害吧

#23


标准io就是程序启动时预先准备好的io通道

#1


因为他们设备不一样,文件io针对的是文件,标准io是对控制台。因为设备特性不一样,必须有不同api访问才最高效

#2


这个也不是他们的“优缺点”决定你选择哪个io,你需要使用文件就得使用文件io,如果你使用控制台,就得标准io

#3


只是这样而已,标准IO是针对控制台,文件IO是针对文件操作的。

#4


2楼3楼说的比较清楚了 
LZ不妨这样想
文件IO的时候就是把文件当成控制台用 只不过输入输出都是在文件里 而不是在控制台里的  
这样类比不一定贴切  不过理解起来容易些

#5


从名字上来区分,文件I/O主要针对文件操作,读写硬盘等,标准I/O,主要是打印输出到屏幕等..

#6


UP

#7


标准IO的推出就是为了统一吧,原来各种操作系统对于文件,设备什么的操作都不统一的,有缓冲没缓冲,各家不同的。

#8


楼上的几位,标准I/O不是也可以用于读取和写入文件吗? 怎么觉得你们没说到点子上。

#9


等待大家的探讨,怎么没有人出来讨论一下呢?

#10


继续等权威的解答。。。。。。。。。。。。。。。

#11


我的理解
标准I/O  就是只要是标准C,就要实现一样接口的标准I/O

而文件I/O各平台系统可能不一样

#12


标准IO是针对控制台,文件IO是针对文件操作的,知道这个对编程没有什么影响了.

#13


能不能再精细一点给我为什么要有标准I/O,文件I/O为什么不能满足控制台需求?

#14


用文件的时候就用文件I/O
    用控制台就用标准I/O!

#15


标准I/O是标准,有了标准I/O就不用知道内部是怎么实现的了
文件I/O是各个系统对文件操作的封装

区别基本上就是缓冲区的问题,标准I/O都有缓冲区,但是文件I/O不一定有

就像Windows为什么还要有文件的API一样

通常情况下个人认为都使用标准I/O就够了

#16


建议楼主去看看 深入理解计算机系统 一书,里面有一章讲这个。
关于文件IO和标准IO,区别就是前者有缓冲区,效率更高,因为后者需要更多的系统调用,
大多数情况下,使用文件IO效率更高。但是在网络编程时,应该使用标准IO,那本书上讲了具体原因,我还没看懂,这里就不讲了。

#17


学习,帮顶

#18


标准IO是针对控制台,文件IO是针对文件操作的。区别基本上就是缓冲区的问题,标准I/O都有缓冲区,但是文件I/O不一定有。

#19


不同情况下有不同的用处  编程选择多一些

#20


引用楼主 wanghaoming100 的回复:
希望明白的人给我讲一讲他们俩的区别,目前我知道大概的。也就是标准I/O有缓冲区(非内核级的)。我想具体了解一下这两种I/O的优缺点,什么时候应该使用那种I/O,
有了文件I/O为什么有要写了一个标准I/O?


其实楼主应该只问带缓冲和不带缓冲的IO
就拿磁盘IO来说
带缓冲的IO可以提高对硬件的写入效率,并减少对硬件的损害吧,这样的缓冲区是由标准库分配的。对文件的读写都是都这个缓冲区的读写,该缓冲区的数据何时写入磁盘那是由标准库控制。当然程序员自己也可以控制是否写入磁盘。

如果使用不带缓冲的IO的话,每次都读写操作都是针对磁盘本身的,这样的坏处就是每次读写的速度慢,读写的频率高。同时对硬件的损害也比较大。其实读写的效率方面,好像也不是就一定低于带缓冲的IO的。只要程序设计的当,效率还是很高的。好像APUE中说到过这个问题。如果想了解这些,可以去看看APUE。

#21


引用 5 楼 oyljerry 的回复:
从名字上来区分,文件I/O主要针对文件操作,读写硬盘等,标准I/O,主要是打印输出到屏幕等..

#22


最主要还是有无缓冲, 比如说对一些低速设备可能使用标准IO效率更高
而对于高速设备可能没有明显区别,要么就是像上面的朋友所说,读写太频繁,会对设备有损害吧

#23


标准io就是程序启动时预先准备好的io通道