1、read和write是UNIX或者一些類UNIX系統(tǒng),比如LINUX系統(tǒng)中使用的,稱為LINUX系統(tǒng)函數(shù)。這種函數(shù)只能在特定的操作系統(tǒng)下使用,可移植性差。fread和fwrite是C庫函數(shù)。這種函數(shù)基本在任何操作系統(tǒng)都能使用,可移植性高。
莆田網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),莆田網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為莆田1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的莆田做網(wǎng)站的公司定做!
2、基礎(chǔ)知識(shí)介紹只介紹LINUX系統(tǒng)函數(shù),常用的有creat,open,close,read,write,lseek,access,一般用于文件編程
3、如何使用談到如何使用就必須說到另一個(gè)知識(shí),文件描述符(file
description),是一個(gè)非負(fù)數(shù)。
函數(shù)原型:int
read(int
fd,
const
void
*buf,
size_t
length)
功能:
從文件描述符fd所指向的文件中讀取length個(gè)字節(jié)到buf所指向的緩存區(qū)中,返回值為實(shí)際讀取的字節(jié)數(shù)
int
write(int
fd,
const
void
*buf,
size_t
length)
功能:
把length個(gè)字節(jié)從buf所指向的緩存區(qū)中寫到件描述符fd所指向的文件中,返回值為實(shí)際寫入的字節(jié)數(shù)
例子:
#define
LENGTH
1024
#define
BUFFES_SIZE
1024
int
n1,
n2;
int
fd1,
fd2;
int
buffer[BUFFES_SIZE];fd1
=
open(
"HEllo1.txt",
O_RDWR
|
O_CREAT,
O_IRUSE
|
O_IWUSR);
fd2
=
open(
"HEllo2.txt",
O_RDWR
|
O_CREAT,
O_IRUSE
|
O_IWUSR);
n1
=
read(
fd1,
buffer,
LENGTH);
n2
=
write(
fd2,
buffer,
n1);
read內(nèi)部是調(diào)_read, _read的返回值在msdn中有這樣的描述
_read returns the number of bytes read, which might be less than count if there are fewer than count bytes left in the file or if the file was opened in text mode, in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character. Only the single linefeed character is counted in the return value. The replacement does not affect the file pointer.
注意這一段: in which case each carriage return–line feed (CR-LF) pair is replaced with a single linefeed character
就是說如果用text模式打開的話, 文件換行時(shí)可能在文本中有2個(gè)字符----換行和縮進(jìn)(CR-LF), 而在return的時(shí)候系統(tǒng)是把它作為1個(gè)回車符號(hào)('\n')所返回的. 所以會(huì)導(dǎo)致這個(gè)情況
返回-1的時(shí)候,要根據(jù)錯(cuò)誤碼來判斷原因,請(qǐng)看下面的函數(shù)說明:
表頭文件 #includeunistd.h
定義函數(shù) ssize_t read(int fd,void * buf ,size_t count);
函數(shù)說明 read()會(huì)把參數(shù)fd 所指的文件傳送count個(gè)字節(jié)到buf指針?biāo)傅膬?nèi)存中。若參數(shù)count為0,則read()不會(huì)有作用并返回0。返回值為實(shí)際讀取到的字節(jié)數(shù),如果返回0,表示已到達(dá)文件尾或是無可讀取的數(shù)據(jù),此外文件讀寫位置會(huì)隨讀取到的字節(jié)移動(dòng)。
附加說明 如果順利read()會(huì)返回實(shí)際讀到的字節(jié)數(shù),最好能將返回值與參數(shù)count 作比較,若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少,則有可能讀到了文件尾、從管道(pipe)或終端機(jī)讀取,或者是read()被信號(hào)中斷了讀取動(dòng)作。當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1,錯(cuò)誤代碼存入errno中,而文件讀寫位置則無法預(yù)期。
錯(cuò)誤代碼 EINTR 此調(diào)用被信號(hào)所中斷。 EAGAIN 當(dāng)使用不可阻斷I/O 時(shí)(O_NONBLOCK),若無數(shù)據(jù)可讀取則返回此值。 EBADF 參數(shù)fd 非有效的文件描述詞,或該文件已關(guān)閉。