read函數2

來源:互聯網
上載者:User

read函數(讀取檔案)

read函數可以讀取檔案。讀取檔案指從某一個已開啟地檔案中,讀取一定數量地字元,然後將這些讀取的字元放入某一個預存的緩衝區內,供以後使用。

使用格式如下:

number = read( ...

read函數(讀取檔案)

read函數可以讀取檔案。讀取檔案指從某一個已開啟地檔案中,讀取一定數量地字元,然後將這些讀取的字元放入某一個預存的緩衝區內,供以後使用。

使用格式如下:

number = read(handle, buffer ,n) ;

上述read調用函數中,各個參數的定義如下:

handle: 這是一個已經開啟的檔案控制代碼,表示從這個檔案控制代碼所代表的檔案讀取資料。

buffer: 指緩衝區,即讀取的資料會被放到這個緩衝區中去。

n: 表示調用一次read操作,應該讀多少數量的字元。

number:表示系統實際所讀取的字元數量。

假設某個檔案的長度是600字元,而n的值是512,則在第1次調用讀這個檔案時,系統可以正常地讀取512個字元地內容,並將這些字元數量傳給number變數,因此number的值將變為88。要第2次讀取這個檔案時,因為檔案已經沒有內容可供讀取了,此時系統會返回0給number。另外,如果讀取檔案失敗,系統將返回-1給number。

比如一個有100個位元組的檔案,第一次讀取10個位元組,這時讀取指標在第10個位元組處。再次進行10個位元組的讀操作時,會接著第一次讀的位置接著往後讀。如果還想從開始讀,可使用lseek函數定位。

Code:

#include "lyl.h"

#define BUF 512

main()

{

static char filename[]="t1.txt" ;

char buffer[BUF] ;

int handle ;

int i ;

int total = 0 ;

handle = open(filename,O_RDONLY) ;

if ( handle == -1 )

{

printf("[%s] create fail !!!!

",filename) ;

exit(1) ;

}

else

{

while( (i = read(handle,buffer,BUF) ) > 0 )

total =i ;

}

printf("The total character in 《%s》 is %d

",filename,total ) ;

exit(0) ;

}

程式執行結果:

The total character in 《t1.txt》 is 11

$cat t1.txt

1234567890

【 read系統調用】   
    
功能描述: 
從檔案讀取資料。 
  
用法:  
#include <unistd.h>

 

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


參數:   
fd: 將要讀取資料的檔案描述詞。
buf:  所讀取到的資料的記憶體緩衝。 
count: 需要讀取的資料量。 
    
返回說明:   
成功執行時,返回所讀取的資料量。失敗返回-1,errno被設為以下的某個值   
EAGAIN:開啟檔案時設定了O_NONBLOCK標誌,並且當前沒有資料可讀取
EBADF:檔案描述詞無效,或者檔案不可讀
EFAULT:參數buf指向的空間不可訪問
EINTR:資料讀取前,操作被訊號中斷
EINVAL:一個或者多個參數無效
EIO:讀寫出錯
EISDIR:參數fd索引的時目錄

 

 

 

 

 備忘:

從串口讀資料,唯讀一次,資料沒有讀全。加入while後,則資料讀全了。

total_read_bytes=0;

 

while(read_bytes=read(fd_485,buffer1,256)>0)

{

memcpy(buffer2+total_read_bytes,buffer1,read_bytes);

total_read_bytes+=read_bytes;

}

 

for(i=0;i<total_read_bytes;i++)

printf("0x%02lx/n",buffer2[i]);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.