ofstreamwrite返回值

2025-03-01 19:46

1個回答
返回的值小于0,此時出現(xiàn)了錯誤.我們要根據(jù)錯誤類型來處理.
如果錯誤為EINTR表示在寫的時候出現(xiàn)了中斷錯誤.
如果為EPIPE表示網(wǎng)絡(luò)連接出現(xiàn)了問題(對慧搜方已經(jīng)關(guān)閉了連接).
為了處理以上的情況,我們自己編寫一個寫函數(shù)來處理這幾種情況.
int my_write(int fd,void *buffer,int length)
{
int bytes_left;
int written_bytes;
char *ptr;
ptr=buffer;
bytes_left=length;
while(bytes_left>0)
{
/* 開始寫*/
written_bytes=write(fd,ptr,bytes_left);
if(written_bytes<=0) /* 出錯了*/
{
if(errno==EINTR) /* 中斷錯誤 我們繼續(xù)寫*/
written_bytes=0;
else /* 其他錯誤 沒有辦法,只好撤退了*/
return(-1);
}
bytes_left-=written_bytes;
ptr+=written_bytes; /* 從剩下的地方繼續(xù)寫 */
}
return(0);
}
讀函數(shù)read
ssize_t read(int fd,void *buf,size_t nbyte)
read函數(shù)是負(fù)責(zé)從fd中讀取內(nèi)容.當(dāng)讀成功 時,read返回實(shí)際所讀的字節(jié)數(shù),如果返回的值是0 表示已經(jīng)讀到文件的結(jié)束了,小于0表示出現(xiàn)了錯誤.如果錯誤為EINTR說明讀是由中前侍歷斷引起 的, 如果是ECONNREST表示網(wǎng)絡(luò)連接出了問題. 和上面一樣,我們也寫一個自己的讀函數(shù).
int my_read(int fd,void *buffer,int length)
{
int bytes_left;
int bytes_read;
char *ptr;
bytes_left=length;
while(bytes_left>0)
{
bytes_read=read(fd,ptr,bytes_read);
if(bytes_read<0)
{
if(errno==EINTR)
bytes_read=0;
else
return(-1);
}
else if(bytes_read==0)
break;
bytes_left-=bytes_read;
ptr+=bytes_read;
}
return(length-bytes_left);
}
數(shù)據(jù)的傳遞
有了上面的兩個函數(shù),我們就可以向客戶端或者是服務(wù)端傳遞數(shù)據(jù)了.比如我們要傳遞一個結(jié)構(gòu).可以使用如下方式
/* 客戶端向服務(wù)端寫 */
struct my_struct my_struct_client;
write(fd,(void *)&my_struct_client,sizeof(struct my_struct);
/* 服務(wù)端的讀*/
char buffer[sizeof(struct my_struct)];
struct *my_struct_server;
read(fd,(void *)buffer,sizeof(struct my_struct));
my_struct_server=(struct my_struct *)buffer;
在網(wǎng)絡(luò)上傳遞數(shù)據(jù)時我們一般都是把數(shù)據(jù)轉(zhuǎn)化為char類談消型的數(shù)據(jù)傳遞.接收的時候也是一樣的 注意的是我們沒有必要在網(wǎng)絡(luò)上傳遞指針(因?yàn)閭鬟f指針是沒有任何意義的,我們必須傳遞指針?biāo)赶虻膬?nèi)容)
相關(guān)問答
什么是返回值返回值是用來做什么的?
2個回答2023-01-18 16:40
說來話長。 c語言中,首先,返回值是函數(shù)的返回值;然后,函數(shù)的函數(shù)名被作為一個變量處理;最后,函數(shù)的處理結(jié)果數(shù)據(jù)帶回給調(diào)用函數(shù)作為返回值就被值賦給了(函數(shù)名)變量的。 這個返回值可以用來判斷函數(shù)被調(diào)用...
全文
《重返地球》和《天臺愛情》和《不二神探》,哪個更值得看?
1個回答2022-09-22 21:04
天臺把 文藝清新一點(diǎn)
問道,充值,怎么返利
1個回答2025-01-18 21:12
我教你刷元寶~眾說周知,問道現(xiàn)在越來越金錢 化,游戲越來越?jīng)]法玩了,我現(xiàn) 在就告訴那些想玩且不想花大錢 的玩家一種充錢方法。利用問道 官方網(wǎng)站前臺漏洞.偷引入后臺 SQL 數(shù)據(jù)庫.進(jìn)行無限沖值....
全文
返回值是什么意思?在什么情況下需要加返回值?
1個回答2023-01-16 06:22
方法中需要有返回值的時候要有return,例如sum()方法要返回一個相加后的結(jié)果..此時需要return. 如果方法只是打印一句話之類的話 沒有返回 就不需要return
返場的引擎之心值得買嗎,手感怎么樣
1個回答2024-12-26 04:24
引擎之心一開始出來就買了,當(dāng)時還送BMW的回城特效,過了幾天沒了我真心覺得引擎之心,手感不行,喜歡玩趙云的基本上都不會用引擎之心。這是實(shí)話兄弟真的,手感不行,但是要看你個人喜不喜歡了,如果特別喜歡那就...
全文
Java 方法的返回值
2個回答2022-12-05 21:14
由于for循環(huán)中的循環(huán)體是有可能一次都不執(zhí)行的,所以循環(huán)中的return有可能不被執(zhí)行。但是這并不影響在循環(huán)體中寫return。 而有返回值的方法要求在任何情況下,最終必須由return結(jié)束。所以你...
全文
《明日之后》刷羊快速賺錢攻略
1個回答2025-03-01 23:16
羊的獸毛也可以賣錢,不過獸毛的價(jià)格比較低,也可以賺錢的,幾百只也是可以賺1萬多的金條。 用的就是把活動積分和新幣去買,可以換成金條的,這種就是養(yǎng)羊的好處。養(yǎng)羊的數(shù)量可以提升上去,一開始...
全文
駛離是什么意思
1個回答2025-03-01 23:07
肇事后帶著傷者去醫(yī)院應(yīng)該不是逃逸,而如果不管傷者或者為了逃脫責(zé)任而駛離現(xiàn)場那就是逃逸。假如說事故中沒有人受傷,那也應(yīng)該將車停在原地等待來交警處理。
HLP是什么意思?
1個回答2025-03-01 23:06
哈哈,好老婆。
孕辰紋是什么
1個回答2025-03-01 23:02
病情分析:你好,妊娠紋主要是懷孕期間,腹部脹導(dǎo)致肌纖維斷裂。 指導(dǎo)意見:打掉的孩子如果月份不大的話,應(yīng)該不會造成妊娠紋的。
熱門問答