printf和标准输出
2023-12-11 17:13:31 # 技术

四种printf

以下四个输出类的函数都是从给定位置加载数据,按照指定的format格式转换为字符串等价版本,并将结果写入各种池。

1
2
3
4
5
// 函数原型
int printf( const char* format, ... );
int fprintf( std::FILE* stream, const char* format, ... );
int sprintf( char* buffer, const char* format, ... );
int snprintf( char* buffer, std::size_t buf_size, const char* format, ... );

其区别在于:

  • printf写结果到 stdout
  • fprintf写结果到文件流 stream
  • sprintf写结果到字符串 buffer
  • snprintf写结果到字符串 buffer 。至多写 buf_size - 1 个字符。产生的字符串会以空字符终止,除非 buf_size 为零。若 buf_size 为零,则不写入任何内容,且 buffer 可以是空指针,然而依旧计算返回值(会写入的字符数,不包含空终止符)并返回。

stdout和stderr

  • stdout是标准输出设备
  • stderr是标准错误输出设备
    两者都向屏幕输出,默认情况下stdout是「行缓冲」的,它的输出会放到一个buffer里面,只有遇到以下情况才会刷出数据到屏幕:
  • 遇到换行符
  • 缓冲区满
  • 使用fflush函数手动刷出数据
  • 使用fclose函数关闭文件
    1
    2
    3
    // 函数原型
    // 对于输出流(和最近操作为输出的更新流),将来自 stream 缓冲区的未写入数据写入关联的输出设备
    int fflush( std::FILE* stream );

输出重定向

基本符号和含义:

  • /dev/null 表示空设备文件
  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误

输出重定向是指把命令或可执行程序的「标准输出」或「标准错误输出」重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中:

  • 使用 > 符号,将标准输出重定向到文件中
  • 使用>>符号,将标准输出结果追加到指定文件后面
  • 使用2>符号,将标准错误输出重定向到文件中
  • 使用2>>符号,将标准错误输出追加到指定文件后面
  • 使用2>&1符号或&>符号,将把标准错误输出stderr重定向到标准输出stdout
  • 使用>/dev/null 符号,将命令执行结果重定向到空设备中,也就是不显示任何信息````