【发布时间】:2015-12-08 06:13:28
【问题描述】:
为什么没有用于读取文件描述符的 dscanf 函数?
我们有用于打印的 fprintf、sprintf 和 dprintf,但对于扫描,只有 fscanf 和 sscanf。
【问题讨论】:
-
对不起,我的错误。但我想我仍然有同样的问题,他们没有包括 dscanf 有什么原因吗?
为什么没有用于读取文件描述符的 dscanf 函数?
我们有用于打印的 fprintf、sprintf 和 dprintf,但对于扫描,只有 fscanf 和 sscanf。
【问题讨论】:
不能写dscanf。
scanf 系列要求流被缓冲,否则它能够放回读取的字符。 POSIX 文件描述符都不是。
考虑这个流
1234xyz
您将如何扫描其中的数字?您不能逐字节读取它并在x 之前停止。那将需要千里眼。你也不能阅读x 并决定你不需要它,因为你不能把它放回去。
【讨论】:
dungetc()。同样,函数名称看起来“没有吸引力”。
因为printf 和scanf 系列函数是C 语言的一部分,所以处理文件描述符的函数不是。相反,它们是操作系统 API 的一部分(在 Linux 或 OSX 等 POSIX 平台上,其他平台模拟这些系统调用)。
dprintf 函数不是一个标准的 C 函数,它是一个扩展。来自this printf (and family) manual page:
dprintf()和vdprintf()函数最初是 GNU 扩展,后来在 POSIX.1-2008 中标准化。
没有dscanf 功能可能只是那些制作原始dprintf 扩展的人的疏忽。
【讨论】: