簡體   English   中英

read()和getc()有什么區別

[英]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可能是預處理器宏。

比較readgetc並沒有多大意義,將readfread進行比較更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM