久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > write()函數的(de)功能介(jie)紹(shao)及(ji)實(shi)例

write()函數(shu)的功(gong)能介(jie)紹及(ji)實例 時間:2018-06-15   ;   來源:未知(zhi)

功能:

向文件(jian)中寫入(ru)數據

頭文件:

#include

原型:

ssize_t write(int fd, const void *buf, size_t count);

參數:

fd: 文件描(miao)述符

buf: 存放(fang)要寫入的數據的緩沖區(qu)首地址

count: 想要(yao)寫入的(de)字節數

返回值:

>=0:成功(gong)寫入的字(zi)節數,0表(biao)示什么都沒寫入

-1: 寫入失敗,并設置全局變量errno

例:

#include

#include

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

if (argc < 2)

{

fprintf(stderr, "Usage: %s \n&quot;, argv[0]);

return -1;

}

int fd = 0;

if (0 > (fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0666)))

{

perror("open");

return -1;

}

char buf[100] = "hello world!";

int ret;

if (strlen(buf) != write(fd, buf, strlen(buf)))

{

perror("write");

return -1;

}

printf("Write file successfully!\n");

close(fd);

return 0;

}

 注意:write第(di)三個(ge)參數表示想要(yao)寫入(ru)的字(zi)節數,返回值(zhi)表示實際寫入(ru)的字(zi)節數,-1表示出錯。如果要(yao)查看(kan)真正(zheng)寫入(ru)的字(zi)節數需要(yao)看(kan)返回值(zhi)。比如套接字(zi)文(wen)(wen)件或者(zhe)管(guan)道(dao)文(wen)(wen)件,有時(shi)候不能一次性把整(zheng)個(ge)buf全部寫入(ru)文(wen)(wen)件,此時(shi)需要(yao)循環寫入(ru)。

例:

ssize_t mywrite(int fd, const void *buf, size_t count)

{

ssize_t size = 0;

int ret = 0;

while (size < count)

{

ret = write(fd, buf+size, count-size);

size += ret;

}

return size;

}

上述函數(shu)mywrite的功能是保證能夠成功寫入(ru)(ru)count字節,mywrite的參(can)數(shu)與write函數(shu)一樣。size表(biao)示已經(jing)寫入(ru)(ru)的字節數(shu),當(dang)成功寫入(ru)(ru)的字節數(shu)小于想要(yao)寫入(ru)(ru)的字節數(shu)時,循環(huan)往文件中寫,從(cong)buf偏(pian)移size處(chu)開始把(ba)剩(sheng)下的內容寫入(ru)(ru)文件,直(zhi)到(dao)size等(deng)于count跳出循環(huan)。

當寫入的文件(jian)時(shi)套接字(zi)或者(zhe)管道文件(jian)時(shi),有(you)一個發送(song)緩(huan)(huan)沖區(qu),如(ru)果(guo)緩(huan)(huan)沖區(qu)已滿,此時(shi)發送(song)阻塞,這(zhe)就是寫阻塞。如(ru)果(guo)設置為非阻塞模式O_NONBLOCK,緩(huan)(huan)沖區(qu)寫滿后,返回-1,錯誤(wu)原因Resource temporarily unavailable。

當寫(xie)(xie)(xie)(xie)入(ru)的文件時套接字或者管道文件時, 如果讀端關閉(bi),寫(xie)(xie)(xie)(xie)端還在向對(dui)端寫(xie)(xie)(xie)(xie)入(ru)數據時,此(ci)時會產生管道破(po)裂(lie)(lie)信號SIGPIPE,導(dao)致程序終止。如果寫(xie)(xie)(xie)(xie)進(jin)程沒有(you)報任何錯誤(wu)(wu)就(jiu)結束,很有(you)可能(neng)就(jiu)是管道破(po)裂(lie)(lie)造成,可以使用(yong)signal函數去(qu)捕捉(zhuo)該信號,判斷錯誤(wu)(wu)原(yuan)因(yin)

例: signal(SIGNAL, handler);

上一篇:printf格式化輸出函數詳解,并附帶最新典型案例

下一篇:讓你快速高效的掌握linux內核編譯過程

熱點文章推(tui)薦
華清學員就業(ye)榜單
高薪(xin)學員經驗分享
熱(re)點新聞(wen)推薦(jian)
前臺專線:010-82525158 企業培訓(xun)洽談專線:010-82525379 院校合(he)作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部