read()

read()

read()會把參數fd所指的檔案傳送nbyte個位元組到buf指針所指的記憶體中。若參數nbyte為0,則read()不會有作用並返回0。返回值為實際讀取到的位元組數,如果返回0,表示已到達檔案尾或無可讀取的數據。錯誤返回-1,並將根據不同的錯誤原因適當的設定錯誤碼。

基本介紹

  • 函式名:read
  • 功 能:從檔案中讀
  • 函式原型:int read
  • 表頭檔案:include <unistd.h>
程式例,Linux C,定義函式,返回值,參數,相關函式,

程式例

#include <stdio.h>#include <io.h>#include <alloc.h>#include <fcntl.h>#include <process.h>#include <sys/stat.h>int main(void){    void* buf ;    int handle;    int bytes ;    buf=malloc(10);    /*    Looks for a file in the current directory named TEST.$$$ and attempts    to read 10 bytes from it.To use this example you should create the    file TEST.$$$    */    handle=open("TEST.$$$",O_RDONLY|O_BINARY,S_IWRITE|S_IREAD);    if(handle==-1)    {        printf("ErrorOpeningFile\n");        exit(1);    }    bytes=read(handle,buf,10);    if(bytes==-1)    {        printf("ReadFailed.\n");        exit(1);    }    else     {        printf("Read:%dbytesread.\n",bytes);    }    return0 ;}

Linux C

定義函式

ssize_t read(int fd, void *buf, size_t count);

返回值

成功返回讀取的位元組數,出錯返回-1並設定errno,如果在調read之前已到達檔案末尾,則這次read返回0。

參數

參數count是請求讀取的位元組數,讀上來的數據保存在緩衝區buf中,同時檔案的當前讀寫位置向後移。注意這個讀寫位置和使用C標準I/O庫時的讀寫位置有可能不同,這個讀寫位置是記在核心中的,而使用C標準I/O庫時的讀寫位置是用戶空間I/O緩衝區中的位置。比如用fgetc讀一個位元組,fgetc有可能從核心中預讀1024個位元組到I/O緩衝區中,再返回第一個位元組,這時該檔案在核心中記錄的讀寫位置是1024,而在FILE結構體中記錄的讀寫位置是1。注意返回值類型是ssize_t,表示有符號的size_t,這樣既可以返回正的位元組數、0(表示到達檔案末尾)也可以返回負值-1(表示出錯)。
read函式返回時,返回值說明了buf中前多少個位元組是剛讀上來的。有些情況下,實際讀到的位元組數(返回值)會小於請求讀的位元組數count,例如:讀常規檔案時,在讀到count個位元組之前已到達檔案末尾。例如,距檔案末尾還有30個位元組而請求讀100個位元組,則read返回30,下次read將返回0。

相關函式

open,close,lseekreadwrite

相關詞條

熱門詞條

聯絡我們