C語(yǔ)言read()函數(shù):讀文件函數(shù)(由已打開(kāi)的文件讀取數(shù)據(jù))
頭文件:
#include <unistd.h>
定義函數(shù):
ssize_t read(intfd,void* buf,size_tcount);
函數(shù)說(shuō)明:read()會(huì)把參數(shù)fd 所指的文件傳送count 個(gè)字節(jié)到buf 指針?biāo)傅膬?nèi)存中. 若參數(shù)count 為0,
則read()不會(huì)有作用并返回0. 返回值為實(shí)際讀取到的字節(jié)數(shù), 如果返回0,
表示已到達(dá)文件尾或是無(wú)可讀取的數(shù)據(jù),此外文件讀寫(xiě)位置會(huì)隨讀取到的字節(jié)移動(dòng).
附加說(shuō)明:
如果順利 read()會(huì)返回實(shí)際讀到的字節(jié)數(shù), 最好能將返回值與參數(shù)count 作比較, 若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少, 則有可能讀到了文件尾三痰、從管道(pipe)或終端機(jī)讀? ?蛘呤莚ead()被信號(hào)中斷了讀取動(dòng)作.
當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1, 錯(cuò)誤代碼存入errno 中, 而文件讀寫(xiě)位置則無(wú)法預(yù)期.
錯(cuò)誤代碼:
EINTR 此調(diào)用被信號(hào)所中斷.
EAGAIN 當(dāng)使用不可阻斷I/O 時(shí)(O_NONBLOCK), 若無(wú)數(shù)據(jù)可讀取則返回此值.
EBADF 參數(shù)fd 非有效的文件描述詞, 或該文件已關(guān)閉.
C語(yǔ)言write()函數(shù):寫(xiě)文件函數(shù)
頭文件:
#include <unistd.h>
定義函數(shù):
ssize_t write (intfd,constvoid* buf,size_tcount);
函數(shù)說(shuō)明:write()會(huì)把參數(shù)buf 所指的內(nèi)存寫(xiě)入count 個(gè)字節(jié)到參數(shù)fd 所指的文件內(nèi). 當(dāng)然, 文件讀寫(xiě)位置也會(huì)隨之移動(dòng).
返回值:如果順利write()會(huì)返回實(shí)際寫(xiě)入的字節(jié)數(shù). 當(dāng)有錯(cuò)誤發(fā)生時(shí)則返回-1, 錯(cuò)誤代碼存入errno 中.
錯(cuò)誤代碼:
EINTR 此調(diào)用被信號(hào)所中斷.
EAGAIN 當(dāng)使用不可阻斷I/O 時(shí) (O_NONBLOCK), 若無(wú)數(shù)據(jù)可讀取則返回此值.
EADF 參數(shù)fd 非有效的文件描述詞, 或該文件已關(guān)閉.