![]() |
1
2
它们基本上是等价的。在这两种情况下,底层流缓冲区最终将调用write()系统调用,以获得相同的效果。 但是请注意,默认情况下,cout与stdio同步,以实现向后兼容性(因此您可以使用C风格的标准输出以及cout,并使其按预期工作)。这种附加同步可以减慢C++输出。如果这很重要,那么可以使用std::ios_base::sync_和_stdio(false)来取消它们之间的链接。然后,重定向的文件cout和fstream应该具有基本相同的性能和功能。 |
![]() |
2
2
前者更适合于UNIX工具的发展哲学,即用另一个程序的输出为一个程序提供数据。
相反,如果你直接写一个文件,你就不能再写了。 当然,如果您不打算让应用程序执行这类操作,可以直接写入文件。但如果我是你,我会让用户决定。可能需要一个命令行参数。 |
![]() |
3
0
我不认为后者必然是“更好”或“更糟”。当您仅从shell重定向cout/stdout时,它所需的代码显然要少得多。它允许简单的文本输出(通过printf/fprintf/cout)。 我更喜欢使用简单的cout调用来进行快速而肮脏的日志记录和“printf”风格的调试。 有 要记录的。例如,在错误情况下,文件无法打开,或者资源耗尽,等等。 我将printf/fprintf用于其他“简单”日志记录任务。
|
![]() |
4
0
对如果生成进程已安排文件描述符1(标准输出)是对磁盘文件的open()调用的结果,则子进程对该描述符的I/O是无效的 相当于对手动打开的文件执行相同的I/O操作。对于使用管道或套接字生成的进程也是如此(即,其行为等同于打开自己的管道或套接字)。事实上,内核甚至无法区分两者之间的区别。重要的是文件描述符是如何创建的(即使用什么系统调用,在什么文件系统上),而不是由哪个进程创建的。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |