为什么没有用于从文件描述符读取的dscanf函数?
我们有fprintf,sprintf和dprintf用于打印,但扫描时只有fscanf和sscanf。
答案 0 :(得分:6)
无法编写dscanf
。
scanf系列要求缓冲流,否则它能够放回已读取的字符。 POSIX文件描述符都不是。
考虑此流
1234xyz
你如何扫描它的数字?您无法逐字节读取它并在x
之前停止。这需要透视。您也无法阅读x
并确定您不需要它,因为您无法将其取回。
答案 1 :(得分:3)
因为printf
和scanf
系列函数是C语言的一部分,所以处理文件描述符的函数不是。相反,它们是操作系统API的一部分(在Linux或OSX等POSIX平台上,其他平台模拟这些系统调用)。
而dprintf
函数不是标准C函数,它是一个扩展名。来自this printf
(and family) manual page:
dprintf()
和vdprintf()
函数最初是GNU扩展,后来在POSIX.1-2008中进行了标准化。
没有dscanf
功能可能仅仅是那些制作原始dprintf
扩展名的人的疏忽。