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]);