Linux-read函數

 


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章