【问题标题】:Why is there no dscanf()?为什么没有 dscanf()?
【发布时间】:2015-12-08 06:13:28
【问题描述】:

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

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

【问题讨论】:

  • 对不起,我的错误。但我想我仍然有同样的问题,他们没有包括 dscanf 有什么原因吗?

标签: c linux posix scanf


【解决方案1】:

不能写dscanf

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

考虑这个流

1234xyz

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

【讨论】:

  • 所以也没有dungetc()。同样,函数名称看起来“没有吸引力”。
  • 为什么不能搜索到文件的上一个位置?
  • @Autodidact 为什么不能在终端或套接字中寻找上一个位置?
  • @Autodidact 在文件中是可能的,但并非所有描述符都引用文件。如前所述,还有套接字和终端,以及管道和串口等许多单向通信方式。
【解决方案2】:

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

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

dprintf()vdprintf() 函数最初是 GNU 扩展,后来在 POSIX.1-2008 中标准化。

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

【讨论】:

  • > 只是一个疏忽是的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2015-06-20
  • 2010-12-10
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多