[英]What's the difference between read() and getc()
我有兩個代碼段:
while((n=read(0,buf,BUFFSIZE))>0)
if(write(1,buf,n)!=n)
err_sys("write error");
while((c=getc(stdin))!=EOF)
if(putc(c,stdout)==EOF)
err_sys("write error");
互聯網上的一些說法使我感到困惑。 我知道標准I / O會自動緩沖,但是我已將buf傳遞給read()
,所以read()
也在進行緩沖,對嗎? 似乎getc()
逐個讀取char數據,在將所有數據發送出去之前,緩沖區將擁有多少數據?
謝謝
雖然這兩個功能均可用於讀取文件,但它們卻大不相同。 首先,在許多系統上, read
是較低級的函數,甚至可能是直接進入OS的系統調用。 read
功能也不是標准的C或C ++,它是POSIX的一部分。 它還可以讀取任意大小的塊,一次只能讀取一個字節。 沒有緩沖(可能不在OS /內核級別),並且“二進制”和“文本”數據之間沒有區別。 在POSIX系統上,其中read
是系統調用,它可以用於讀取所有類型的設備,而不僅僅是文件。
getc
函數是更高級別的函數。 它通常使用緩沖的輸入(因此有時會將輸入讀入緩沖區中,有時使用read
,並且getc
函數從該緩沖區中獲取其字符)。 一次也只返回一個字符。 作為標准庫的一部分,它也是C和C ++規范的一部分。 另外,取決於文件是以文本模式還是二進制模式打開的,讀取的數據和函數返回的數據可能會有轉換。
另一個區別是read
始終也是一個函數,而getc
可能是預處理器宏。
比較read
和getc
並沒有多大意義,將read
與fread
進行比較更有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.