詳解C語言中write函數(shù)
write函數(shù)是C語言函數(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(出錯(cuò))
write函數(shù)把buf中nbyte寫入文件描述符handle所指的文檔,成功時(shí)返回寫的字節(jié)數(shù),錯(cuò)誤時(shí)返回-1.
另一種是:write(const char* str,int n)
str是 字符指針或字符 數(shù)組,用來存放一個(gè)字符串。n是int型數(shù),它用來表示輸出顯示字符串中字符的個(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說明讀是由中斷引起的, 如果是ECONNREST表示網(wǎng)絡(luò)連接出了問題.
寫函數(shù)write
ssize_t write( int ?fd, const ? void ? * buf,size_t nbytes)?
write函數(shù)將buf中的nbytes字節(jié)內(nèi)容寫入文件描述符fd.成功時(shí)返回寫的字節(jié)數(shù).失敗時(shí)返回-1. 并設(shè)置errno變量. 在網(wǎng)絡(luò)程序中,當(dāng)我們向套接字文件描述符寫時(shí)有倆種可能.
1)write的返回值大于0,表示寫了部分或者是全部的數(shù)據(jù).
2)返回的值小于0,此時(shí)出現(xiàn)了錯(cuò)誤.我們要根據(jù)錯(cuò)誤類型來處理. 如果錯(cuò)誤為EINTR表示在寫的時(shí)候出現(xiàn)了中斷錯(cuò)誤.
如果為EPIPE表示網(wǎng)絡(luò)連接出現(xiàn)了問題(對方已經(jīng)關(guān)閉了連接).
到此這篇關(guān)于C語言中write函數(shù)的文章就介紹到這了,更多相關(guān)C語言write函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中jsoncpp庫和nlohmann-json庫實(shí)現(xiàn)JSON與字符串類型轉(zhuǎn)換
jsoncpp是ROS自帶的一個(gè)JSON庫,它提供了一些函數(shù)來解析和生成JSON數(shù)據(jù),在ROS中,可以使用jsoncpp庫來實(shí)現(xiàn)JSON與字符串類型之間的轉(zhuǎn)換,這篇文章主要介紹了jsoncpp庫和nlohmann-json庫實(shí)現(xiàn)JSON與字符串類型轉(zhuǎn)換,需要的朋友可以參考下2023-08-08
C語言基礎(chǔ)之malloc和free函數(shù)詳解
這篇文章主要介紹了C語言基礎(chǔ)之malloc和free函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例
這篇文章主要介紹了C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法,結(jié)合具體實(shí)例形式分析了C++通過數(shù)組的遍歷、排序獲取最大與最小元素的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
C/C++細(xì)數(shù)宏與函數(shù)有那些區(qū)別
在C程序中,可以用宏代碼提高執(zhí)行效率。宏代碼本身不是函數(shù),但使用起來象函數(shù)。預(yù)處理器用復(fù)制宏代碼的方式代替函數(shù)調(diào)用,省去了參數(shù)壓棧、生成匯編語言的CALL調(diào)用、返回參數(shù)、執(zhí)行return等過程,從而提高了速度2022-10-10
基于C語言實(shí)現(xiàn)五子棋游戲完整實(shí)例代碼
這篇文章主要介紹了基于C語言實(shí)現(xiàn)五子棋游戲完整實(shí)例代碼,相信對于學(xué)習(xí)游戲開發(fā)的朋友會有一定的幫助與借鑒價(jià)值,需要的朋友可以參考下2014-08-08

