linux之输入输出流

输出流:

源代码:从未知参数读取,然后输入到流中,从后向前
      #include <stdio.h>
      int printf(const char *format, ...);
      int fprintf(FILE *stream, const char *format, ...);
      int dprintf(int fd, const char *format, ...);
      int sprintf(char *str, const char *format, ...);
      int snprintf(char *str, size_t size, const char *format, ...);
      #include <stdarg.h>
      int vprintf(const char *format, va_list ap);
      int vfprintf(FILE *stream, const char *format, va_list ap);
      int vdprintf(int fd, const char *format, va_list ap);
      int vsprintf(char *str, const char *format, va_list ap);
      int vsnprintf(char *str, size_t size, const char *format, va_list ap);	

描述:
The functions printf() and vprintf() write output to stdout, the standard output stream; fprintf() and vfprintf() write output to the given output stream; sprintf(), snprintf(), vsprintf() and vsnprintf() write to the character string str.
printf()、vprintf()函数:写入标准输出流,arg:可变参数列表的对象。这应被 中定义的 va_start 宏初始化

      #include <stdarg.h>  		//man 3 stdarg
      void va_start(va_list ap, last);
      type va_arg(va_list ap, type);
      void va_end(va_list ap);
      void va_copy(va_list dest, va_list src);

fprintf()、vfprintf()函数:写入指定的输出流
sprintf()、snprintf()、vsprintf()函数:写入指定字符串,可用于字符串的数据组装
dprintf()函数:与sprintf()函数作用一样,不过一个是用文件名(含路径),一个是用文件描述符fp
snprintf()、vsnprintf()函数:size_t 等价 int ,其size需要考虑字符串末尾的’\0’
注意:
C99和POSIX.1-2001指定,如果调用sprintf()、snprintf()、vsprintf()或vsnprintf()将导致重叠的对象之间发生复制(例如,如果目标字符串数组和提供的输入参数之一引用同一个缓冲区),则结果为未定义。
函数 vprintf()、vfprintf()、vdprintf()、vsprintf()、vsnprintf()等价的函数分别是printf()、fprintf()、dprintf()、sprintf()、snprintf(),只不过它们是用va_list而不是可变数量的参数调用的。这些函数不调用va_end宏。因为它们调用了va_arg宏,所以ap的值在调用之后是未定义的

输入流:

源代码:从流中读取,然后输入,从前向后
      #include <stdio.h>
      int scanf(const char *format, ...);
      int fscanf(FILE *stream, const char *format, ...);
      int sscanf(const char *str, const char *format, ...);
      #include <stdarg.h>
      int vscanf(const char *format, va_list ap);
      int vsscanf(const char *str, const char *format, va_list ap);
      int vfscanf(FILE *stream, const char *format, va_list ap);

描述:
The scanf() function reads input from the standard input stream stdin, fscanf() reads input from the stream pointer stream, and sscanf() reads its input from the character string pointed to by str.
scanf()、vscanf()函数:从标准输入流中读取数据,然后写入到后面的参数(…)中,参数ap同上
fscanf()、vfscanf()函数:从指定的文件流中读取数据,然后输入到后面的参数(…)中
sscanf()、vsscanf()函数:从指定的字符串中读取数据,然后输入到后面的参数(…)中