詳解C語(yǔ)言中write函數(shù)
write函數(shù)是C語(yǔ)言函數(shù)
write函數(shù)所在的頭文件為 <unistd.h>
write有兩種用法。一種是:
ssize_twrite(int handle, void *buf, int nbyte);
handle 是 文件描述符;
buf是指定的緩沖區(qū),即 指針,指向一段內(nèi)存單元;
nbyte是要寫(xiě)入文件指定的字節(jié)數(shù);返回值:寫(xiě)入文檔的字節(jié)數(shù)(成功);-1(出錯(cuò))
write函數(shù)把buf中nbyte寫(xiě)入文件描述符handle所指的文檔,成功時(shí)返回寫(xiě)的字節(jié)數(shù),錯(cuò)誤時(shí)返回-1.
另一種是:write(const char* str,int n)
str是 字符指針或字符 數(shù)組,用來(lái)存放一個(gè)字符串。n是int型數(shù),它用來(lái)表示輸出顯示字符串中字符的個(gè)數(shù)。
write("string",strlen("string");表示輸出 字符串常量
#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; }
讀函數(shù)read
ssize_t read( int ?fd, void ? * buf,size_t nbyte)?
read函數(shù)是負(fù)責(zé)從fd中讀取內(nèi)容. 成功時(shí),read返回實(shí)際所讀的字節(jié)數(shù),如果返回的值是0,表示已經(jīng)讀到文件的結(jié)束了.
小于0表示出現(xiàn)了錯(cuò)誤. 如果錯(cuò)誤為EINTR說(shuō)明讀是由中斷引起的, 如果是ECONNREST表示網(wǎng)絡(luò)連接出了問(wèn)題.
寫(xiě)函數(shù)write
ssize_t write( int ?fd, const ? void ? * buf,size_t nbytes)?
write函數(shù)將buf中的nbytes字節(jié)內(nèi)容寫(xiě)入文件描述符fd.成功時(shí)返回寫(xiě)的字節(jié)數(shù).失敗時(shí)返回-1. 并設(shè)置errno變量. 在網(wǎng)絡(luò)程序中,當(dāng)我們向套接字文件描述符寫(xiě)時(shí)有倆種可能.
1)write的返回值大于0,表示寫(xiě)了部分或者是全部的數(shù)據(jù).
2)返回的值小于0,此時(shí)出現(xiàn)了錯(cuò)誤.我們要根據(jù)錯(cuò)誤類(lèi)型來(lái)處理. 如果錯(cuò)誤為EINTR表示在寫(xiě)的時(shí)候出現(xiàn)了中斷錯(cuò)誤.
如果為EPIPE表示網(wǎng)絡(luò)連接出現(xiàn)了問(wèn)題(對(duì)方已經(jīng)關(guān)閉了連接).
到此這篇關(guān)于C語(yǔ)言中write函數(shù)的文章就介紹到這了,更多相關(guān)C語(yǔ)言write函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(68.文本左右對(duì)齊),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07QT Creator+OpenCV實(shí)現(xiàn)圖像灰度化的示例代碼
這篇文章主要為大家詳細(xì)介紹了QT如何利用Creator和OpenCV實(shí)現(xiàn)圖像灰度化效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-12-12C++實(shí)現(xiàn)獲取時(shí)間戳和計(jì)算運(yùn)行時(shí)長(zhǎng)
這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)獲取時(shí)間戳和計(jì)算運(yùn)行時(shí)長(zhǎng)功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-12-12基于QT實(shí)現(xiàn)自定義溫度計(jì)的示例代碼
QT原生控件沒(méi)有實(shí)現(xiàn)如儀表盤(pán)或者溫度計(jì)的控件,只好自己實(shí)現(xiàn),所以本文為大家介紹了如何利用qt實(shí)現(xiàn)自定義溫度/濕度控件,感興趣的小伙伴可以了解下2023-11-11C++實(shí)現(xiàn)簡(jiǎn)易UDP網(wǎng)絡(luò)聊天室
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)易UDP網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07基于C語(yǔ)言實(shí)現(xiàn)個(gè)人通訊錄管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)個(gè)人通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06C++11如何實(shí)現(xiàn)無(wú)鎖隊(duì)列
這篇文章主要介紹了C++11如何實(shí)現(xiàn)無(wú)鎖隊(duì)列,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08