write寫出常見的輸入格式為f.write()。write函數(shù)是C語言函數(shù)。C語言函數(shù)是一種函數(shù),用來編譯C語言,所在庫函數(shù)為ctype.h,分為分類函數(shù),數(shù)學函數(shù),目錄函數(shù),進程函數(shù),診斷函數(shù),操作函數(shù)等。
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的鄠邑網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
大多數(shù)情況下,write成功后返回的寫入字節(jié)數(shù)都等于你傳入的長度。
但是如果你要寫的長度超過了的文件的最大可能時,比方說,你的磁盤還剩下128個字節(jié),這時你向磁盤上的某個文件一次性寫512個字節(jié),返回值就是128,只有前128個字節(jié)成功寫入。
再比如,你用write寫的不是一個普通文件,而是設(shè)備文件/socket等,那也可能返回值小于你指定的值,這就可能是具體設(shè)備的限制等,比如寫入的數(shù)量超過了緩沖大小等。
1、要用到unistd.h頭文件。
2、 Write函數(shù)
用法:
write函數(shù)所在的頭文件為 unistd.h
write有兩種用法。一種是:
ssize_twrite(int handle, void *buf, int nbyte);
handle 是文件描述符;
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");表示輸出字符串常量
3、程序示例:
#include?stdio.h
#include?stdlib.h
#include?fcntl.h
#include?sys\stat.h
#include?io.h
#include?string.h
int?main(void)
{
int?*handle;?char?string[40];
int?length,?res;/*?Create?a?file?named?"TEST.$$$"?in?the?current?directory?and?write?a?string?to?it.?If?"TEST.$$$"?already?exists,?it?will?be?overwritten.?*/
if?((handle?=?open("TEST.$$$",?O_WRONLY?|?O_CREAT?|?O_TRUNC,?S_IREAD?|?S_IWRITE))?==?-1)
{
printf("Error?opening?file.\n");
exit(1);
}
strcpy(string,?"Hello,?world!\n");
length?=?strlen(string);
if?((res?=?write(handle,?string,?length))?!=?length)
{
printf("Error?writing?to?the?file.\n");
exit(1);
}
printf("Wrote?%d?bytes?to?the?file.\n",?res);
close(handle);?return?0;?}
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)。當然,文件讀寫位置也會隨之移動。
返回值:如果順利write()會返回實際寫入的字節(jié)數(shù)。當有錯誤發(fā)生時則返回-1,錯誤代碼存入errno中。
錯誤代碼:
EINTR 此調(diào)用被信號所中斷。
EAGAIN 當使用不可阻斷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指針所指的內(nèi)存中。若參數(shù)count為0,則read為實際讀取到的字節(jié)數(shù),如果返回0,表示已到達文件尾或是無可讀取的數(shù)據(jù),此外文件讀寫位置會隨讀取到的字節(jié)移動。
附加說明:如果順利read()會返回實際讀到的字節(jié)數(shù),最好能將返回值與參數(shù)count 作比較,若返回的字節(jié)數(shù)比要求讀取的字節(jié)數(shù)少,則有可能讀到了文件尾、從管道(pipe)或終端機讀取,或者是read()被信號中斷了讀取動作。當有錯誤發(fā)生時則返回-1,錯誤代碼存入errno中,而文件讀寫位置則無法預(yù)期。
錯誤代碼:
EINTR 此調(diào)用被信號所中斷。
EAGAIN 當使用不可阻斷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;