为什么没有dscanf()?

时间:2015-12-08 06:13:29

标签: c linux posix scanf

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

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

2 个答案:

答案 0 :(得分:6)

无法编写dscanf

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

考虑此流

1234xyz

你如何扫描它的数字?您无法逐字节读取它并在x之前停止。这需要透视。您也无法阅读x并确定您不需要它,因为您无法将其取回。

答案 1 :(得分:3)

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

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

  

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

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