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