2015-12-08 42 views
1

爲什麼沒有dscanf函數從文件描述符中讀取?爲什麼沒有dscanf()?

我們有用於打印的fprintf,sprintf和dprintf,但是對於掃描,只有fscanf和sscanf。

+0

對不起,我的錯。但我想我仍然有同樣的問題,是否有一個原因,他們不包括dscanf? – rondoisthebest

回答

4

不可能寫dscanf

scanf系列要求緩衝流,否則它能夠放回一個已讀取的字符。 POSIX文件描述符都不是。

考慮這個流

1234xyz 

你會如何掃描數過嗎?您不能逐字節地讀取它,並在x之前停止。這需要透視。你也無法閱讀x並決定你不需要它,因爲你不能放回去。

+0

所以沒有'dungetc()'。同樣,函數名稱看起來「不吸引人」。 – chux

2

因爲printfscanf函數族是C語言的一部分,所以處理文件描述符的函數不是。相反,它們是操作系統API的一部分(在Linux或OSX等POSIX平臺上,其他平臺模擬這些系統調用)。

dprintf功能是而不是一個標準的C函數,它是一個擴展。從this printf (and family) manual page

dprintf()vdprintf()功能均是後來在POSIX.1-2008標準化原本GNU擴展。

沒有dscanf功能可能僅僅是那些做出原始dprintf擴展的人的疏忽。