write()寫(xiě)文件函數(shù)
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出天等免費(fèi)做網(wǎng)站回饋大家。
原形:int
write(int
handle,char
*buf,unsigned
len)
用法:write(文件句柄,緩沖區(qū)地址,緩沖區(qū)字節(jié)長(zhǎng)度最大65534);
功能:將緩沖區(qū)的數(shù)據(jù)寫(xiě)入與handle相聯(lián)的文件或設(shè)備中,handle是從creat、open、dup或dup2調(diào)用中得到的文件句柄。對(duì)于磁盤(pán)或磁盤(pán)文件,寫(xiě)操作從當(dāng)前文件指針處開(kāi)始,對(duì)于用O_APPEND選項(xiàng)打開(kāi)的文件,寫(xiě)數(shù)據(jù)之前,文件指針指向EOF;對(duì)于設(shè)備,字節(jié)被直接傳送到設(shè)備中;
返回值:實(shí)際寫(xiě)入的字節(jié)數(shù)(不包括回車(chē)符),出錯(cuò)時(shí)返回-1。
頭文件:io.h
1、函數(shù)名: write
表頭文件:#includeunistd.h
定義函數(shù):ssize_t write (int fd,const void * buf,size_t count);
函數(shù)說(shuō)明:write()會(huì)把指針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ù)可讀取則返回此值。
EBADF 參數(shù)fd非有效的文件描述詞,或該文件已關(guān)閉。
程序例:
#includestdlib.h
#includeunistd.h
#includestdio.h
#includestring.h
#includefcntl.h
#includeerrno.h
intmain(void)
{
inthandle;
charstring[40];
intlength,res;
/*
Createafilenamed"TEST.$$$"inthecurrentdirectoryandwrite
astringtoit.If"TEST.$$$"alreadyexists,itwillbeoverwritten.
*/
if((handle=open("TEST.$$$",O_WRONLY|O_CREAT|O_TRUNC,
S_IREAD|S_IWRITE))==-1)
{
printf("Erroropeningfile.\n");
exit(1);
}
strcpy(string,"Hello,world!\n");
length=strlen(string);
if((res=write(handle,string,length))!=length)
{
printf("Errorwritingtothefile.\n");
exit(1);
}
printf("Wrote%dbytestothefile.\n",res);
close(handle);
return0;
}
structxfcb{
charxfcb_flag;/*Contains0xfftoindicatexfcb*/
charxfcb_resv[5];/*ReservedforDOS*/
charxfcb_attr;/*Searchattribute*/
structfcbxfcb_fcb;/*Thestandardfcb*/
};
2、函數(shù)名: read
表頭文件:#includeunistd.h
定義函數(shù):ssize_t read(int fd,void * buf ,size_t count);
函數(shù)說(shuō)明:read()會(huì)把參數(shù)fd 所指的文件傳送count個(gè)字節(jié)到buf指針?biāo)傅膬?nèi)存中。若參數(shù)count為0,則read為實(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ī)讀取,或者是read()被信號(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)閉。
程序例:
#include
#include
#include
#include
#include
#include
int?main(void)
{
void?*buf;
int?handle,?bytes;
buf?=?malloc(10);
/*
Looks?for?a?file?in?the?current?directory?named?TEST.$$$?and?attempts
to?read?10?bytes?from?it.?To
}
if?((bytes?=?read(handle,?buf,?10))?==?-1)?{
printf("Read?Failed.\n");
exit(1);
}
else?{
printf("Read:?%d?bytes?read.\n",?bytes);
}
return?0;
1.糾正:
read和write是UNIX或者一些類(lèi)UNIX系統(tǒng),比如LINUX系統(tǒng)中使用的,稱(chēng)為L(zhǎng)INUX系統(tǒng)函數(shù)。這種函數(shù)只能在特定的操作系統(tǒng)下使用,可移植性差。
fread和fwrite是C庫(kù)函數(shù)。這種函數(shù)基本在任何操作系統(tǒng)都能使用,可移植性高。
2.基礎(chǔ)知識(shí)介紹
只介紹LINUX系統(tǒng)函數(shù),常用的有creat,open,close,read,write,lseek,access,一般用于文件編程
3.如何使用
談到如何使用就必須說(shuō)到另一個(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ū)中寫(xiě)到件描述符fd所指向的文件中,返回值為實(shí)際寫(xiě)入的字節(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);
好了累死了,答案完全原創(chuàng),希望對(duì)你有幫助
大多數(shù)情況下,write成功后返回的寫(xiě)入字節(jié)數(shù)都等于你傳入的長(zhǎng)度。
但是如果你要寫(xiě)的長(zhǎng)度超過(guò)了的文件的最大可能時(shí),比方說(shuō),你的磁盤(pán)還剩下128個(gè)字節(jié),這時(shí)你向磁盤(pán)上的某個(gè)文件一次性寫(xiě)512個(gè)字節(jié),返回值就是128,只有前128個(gè)字節(jié)成功寫(xiě)入。
再比如,你用write寫(xiě)的不是一個(gè)普通文件,而是設(shè)備文件/socket等,那也可能返回值小于你指定的值,這就可能是具體設(shè)備的限制等,比如寫(xiě)入的數(shù)量超過(guò)了緩沖大小等。
文章標(biāo)題:c語(yǔ)言文件write函數(shù),c語(yǔ)言write函數(shù)頭文件
本文路徑:http://chinadenli.net/article44/phgehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、企業(yè)網(wǎng)站制作、域名注冊(cè)、電子商務(wù)、商城網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)