write()寫文件函數(shù)
專注于為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)秦都免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
原形:int write(int handle,char *buf,unsigned len)
功能:將緩沖區(qū)的數(shù)據(jù)寫入與handle相聯(lián)的文件或設(shè)備中,handle是從creat、open、dup或dup2調(diào)用中得到的文件句柄。
對于磁盤或磁盤文件,寫操作從當(dāng)前文件指針處開始,對于用O_APPEND選項打開的文件,寫數(shù)據(jù)之前,文件指針指向EOF;對于設(shè)備,字節(jié)被直接傳送到設(shè)備中。
擴(kuò)展資料:
用法
頭文件:unistd.h
write有兩種用法。一種是:ssize_t write(int fd, const void *buf, size_t nbyte);
fd:文件描述符;
buf:指定的緩沖區(qū),即指針,指向一段內(nèi)存單元;
nbyte:要寫入文件指定的字節(jié)數(shù);
返回值:寫入文檔的字節(jié)數(shù)(成功);-1(出錯)
write函數(shù)把buf中nbyte寫入文件描述符handle所指的文檔,成功時返回寫的字節(jié)數(shù),錯誤時返回-1.
另一種是: write(const char* str,int n)
str是字符指針或字符數(shù)組,用來存放一個字符串。n是int型數(shù),它用來表示輸出顯示字符串中字符的個數(shù)。
write("string",strlen("string");表示輸出字符串常量
參考資料來源:百度百科-write函數(shù)
1、函數(shù)名: write
表頭文件:#includeunistd.h
定義函數(shù):ssize_t write (int fd,const void * buf,size_t count);
函數(shù)說明:write()會把指針buf所指的內(nèi)存寫入count個字節(jié)到參數(shù)fd所指的文件內(nèi)。當(dāng)然,文件讀寫位置也會隨之移動。
返回值:如果順利write()會返回實際寫入的字節(jié)數(shù)。當(dāng)有錯誤發(fā)生時則返回-1,錯誤代碼存入errno中。
錯誤代碼:
EINTR 此調(diào)用被信號所中斷。
EAGAIN 當(dāng)使用不可阻斷I/O 時(O_NONBLOCK),若無數(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ù)說明:read()會把參數(shù)fd 所指的文件傳送count個字節(jié)到buf指針?biāo)傅膬?nèi)存中。若參數(shù)count為0,則read為實際讀取到的字節(jié)數(shù),如果返回0,表示已到達(dá)文件尾或是無可讀取的數(shù)據(jù),此外文件讀寫位置會隨讀取到的字節(jié)移動。
附加說明:如果順利read()會返回實際讀到的字節(jié)數(shù),最好能將返回值與參數(shù)count 作比較,若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少,則有可能讀到了文件尾、從管道(pipe)或終端機(jī)讀取,或者是read()被信號中斷了讀取動作。當(dāng)有錯誤發(fā)生時則返回-1,錯誤代碼存入errno中,而文件讀寫位置則無法預(yù)期。
錯誤代碼:
EINTR 此調(diào)用被信號所中斷。
EAGAIN 當(dāng)使用不可阻斷I/O 時(O_NONBLOCK),若無數(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或者一些類UNIX系統(tǒng),比如LINUX系統(tǒng)中使用的,稱為LINUX系統(tǒng)函數(shù)。這種函數(shù)只能在特定的操作系統(tǒng)下使用,可移植性差。fread和fwrite是C庫函數(shù)。這種函數(shù)基本在任何操作系統(tǒng)都能使用,可移植性高。
2、基礎(chǔ)知識介紹只介紹LINUX系統(tǒng)函數(shù),常用的有creat,open,close,read,write,lseek,access,一般用于文件編程
3、如何使用談到如何使用就必須說到另一個知識,文件描述符(file
description),是一個非負(fù)數(shù)。
函數(shù)原型:int
read(int
fd,
const
void
*buf,
size_t
length)
功能:
從文件描述符fd所指向的文件中讀取length個字節(jié)到buf所指向的緩存區(qū)中,返回值為實際讀取的字節(jié)數(shù)
int
write(int
fd,
const
void
*buf,
size_t
length)
功能:
把length個字節(jié)從buf所指向的緩存區(qū)中寫到件描述符fd所指向的文件中,返回值為實際寫入的字節(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);