为什么没有 dscanf()?

Why is there no dscanf()?

为什么没有用于读取文件描述符的 dscanf 函数?

我们有用于打印的 fprintf、sprintf 和 dprintf,但用于扫描的只有 fscanf 和 sscanf。

因为 printfscanf 函数族是 C 语言的一部分,处理文件描述符的函数不是。相反,它们是操作系统 API 的一部分(在 Linux 或 OSX 等 POSIX 平台上,其他平台模拟这些系统调用)。

并且 dprintf 函数 不是 标准 C 函数,它是一个扩展。来自 this printf (and family) manual page:

The dprintf() and vdprintf() functions were originally GNU extensions that were later standardized in POSIX.1-2008.

没有 dscanf 功能可能只是那些制作原始 dprintf 扩展的人的疏忽。

无法写入 dscanf

scanf 系列要求缓冲流,否则它能够放回已读取的字符。 POSIX 文件描述符都不是。

考虑这个流

1234xyz

你会如何扫码呢?您不能逐字节读取它并在 x 之前停止。那将需要千里眼。你也不能阅读 x 并决定你不需要它,因为你不能把它放回去。