1. 程式人生 > >write函式的詳解與read函式的詳解

write函式的詳解與read函式的詳解

write()

標頭檔案:#include<unistd.h>

原型:

ssize_t write(int fd,const void*buf,size_t count);
引數說明:
  fd:是檔案描述符(write所對應的是寫,即就是1)
  buf:通常是一個字串,需要寫入的字串
  count:是每次寫入的位元組數

返回值:

 成功:返回寫入的位元組數
 失敗:返回-1並設定errno
  ps: 寫常規檔案時,write的返回值通常等於請求寫的位元組
       數count, 而向終端裝置或者網路寫時則不一定

read()

標頭檔案:#include<unistd.h>
功能:用於從檔案描述符對應的檔案讀取資料(從開啟的裝置或檔案中讀取資料)

原型:

ssize_t read(int fd,void*buf,size_t count)
引數說明:
fd:      是檔案描述符
buf:     為讀出資料的緩衝區;
count:   為每次讀取的位元組數(是請求讀取的位元組數,讀上來的資料保
         存在緩衝區buf中,同時檔案的當前讀寫位置向後移)

返回值:

 成功:返回讀出的位元組數
 失敗:返回-1,並設定errno,如果在呼叫read
       之前到達檔案末尾,則這次read返回0

程式碼:

#include<stdio.h>
#include<string.h> #include<unistd.h> int main() { const char*msg="hello\n"; int len = strlen(msg); write(1,msg,len);//write所對應的檔案描述符為1 char buf[1024]={0}; read(0,buf,len);//read所對應的檔案描述符為0 return 0; }

執行結果:
這裡寫圖片描述

fread函式read函式的區別

1.fread函式是封裝好的庫函式,而read函式是系統函式,一般來說,fread效率更高;
2.讀取檔案的差別:fread函式功能更強大,可以讀取結構體的二進位制檔案,但是如果是最底層的操作,用到檔案描述符的話,用read會更好。

相關推薦

write函式read函式

write() 標頭檔案:#include<unistd.h> 原型: ssize_t write(int fd,const void*buf,size_t count);

Cpp--拷貝建構函式(深拷貝淺拷貝)

對於普通型別的物件來說,它們之間的複製是很簡單的,例如: int a=88; int b=a;  而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看一個類物件拷貝的簡單例子。 #include <iostream> using name

Python的函式傳值傳引用簡

Python到底值傳值還是傳引用? 先看兩段程式碼 程式碼1: 1 2 3 4 5 6 7 >>> a=3 >>> def f(b): ...     b=1 ...     >>> f

es6函式的拓展箭頭函式

1、函式的預設值: function fn (a=1,b=2) { console.log(a) //10 console.log(b) //2 } fn(10) 可以看到,當沒有傳第二個引數的時候,b的值為預設值2。 var ag

atexit函式的呼叫exit函式和_exit函式的區別

1 atexit()函式標頭檔案:#include<stdlib.h>功 能: 註冊終止函式(即main執行結束後呼叫的函式)用 法: int atexit(void (*func)(void)); 注意:按照ISO C的規定,一個程序可以登記多達32個函式,這

c++ fill函式,fillmemset函式的區別

【C++】fill函式,fill與memset函式的區別 memset函式 按照位元組填充某字元在標頭檔案<cstring>裡面 fill函式 按照單元賦值,將一個區間的元素都賦同一個值在標頭檔案<algorithm>裡面 因為memset

C++ — fill函式,fillmemset函式的區別

【C++】fill函式,fill與memset函式的區別 memset函式 按照位元組填充某字元 在標頭檔案<cstring>裡面 fill函式 按照單元賦值,將一個區間的元素都賦同一個值 在標頭檔案<algorithm&

函式呼叫棧幀

函式呼叫與棧幀詳解 2017年04月19日 22:07:34 T_tangc 閱讀數:826 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_25424545/article/details/70232141 &

mysql中date_adddate_sub函式使用

           mysql中date_add與date_sub函式使用詳解   轉載:http://www.111cn.net/database/mysql/52936.htm 在mysql中date_a

互斥量、條件變數pthread_cond_wait()函式的使用,(二)

1.Linux“執行緒”      程序與執行緒之間是有區別的,不過linux核心只提供了輕量程序的支援,未實現執行緒模型。Linux是一種“多程序單執行緒”的作業系統。Linux本身只有程序的概念,而其所謂的“執行緒”本質上在核心裡仍然是程序。      大家知道,

linux sendrecv函式

1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); 3 ssize_t send(int sockfd, const void *

yolov3的anchor機制損失函式

一、yolov3的anchor機制 網路實際的預測值為tx、ty、tw、th,根據上圖中的四個公式計算得到預測框的中心點座標和寬高bx、 by、 bw、 bh。其中,cx、 cy為當前grid相對於左上角grid偏移的grid數量。 σ()函式為logist

Scala的集合高階函式搭配

前言 Java 裡的 Null Pointer Exception 寫過一陣子的Java後, 應該會對NullPointerException (NPE)這種東西很熟悉,基本上會碰到這種異常,就是你有一個變數是 null,但你卻呼叫了它的方法,或是取某個的值。 舉例而言,下面的 Java 程式碼就會丟擲NP

對SVM函式的理解及sklearn引數

支援向量機是在深度學習流行開來之前,效能表現最好的一種機器學習方法。在看這篇blog之前,預設讀者已經有了對支援向量機的基本概念的認識。 一、支援向量機的進一步理解 支援向量機的優化目標在邏輯迴歸優化目標基礎上進一步產生的。具體優化目標不說了,參看各種svm的書籍和部落格

SVM系列(五):非線性支援向量機函式

對解線性分類問題,線性分類支援向量機是一種有效的方法。但是,有時分類問題是非線性的,這時可以使用非線性支援向量機。 核技巧 **非線性分類問題:**如上面左圖所示,能用 R

urlencode()urldecode()函式字元編碼原理

其原理就是把中文字元轉換為十六進位制並按某種規則進行字串組合,實現字元的編碼與解編碼,保證URL資料傳遞過程中字元的完整性和相容性,主要討論中文字元的編碼情況。 一,FireFox瀏覽器編碼中文字元 在Firefox瀏覽器下如果輸入中文字元,將會自動實現URL編碼,如下 按下Enter鍵前 按下Ente

JavaScript函式的特性應用實踐深入

本文例項講述了JavaScript函式的特性與應用實踐。分享給大家供大家參考,具體如下: 函式用於指定物件的行為。所謂的程式設計,就是將一組需求分解為一組函式和資料結構的技能。 1 函式物件 JavaScript 函式就是物件。物件是名值對的集合,它還擁有一個連線到原型物件的連結。物

c++中虛表指標虛擬函式

1.c++類中的過載 看看下面的程式碼: #include <iostream> using namespace std; class Vehicle

spark三種清理資料的方式:UDF,自定義函式,spark.sql;Python中的zip()*zip()函式//及python中的*args和**kwargs

(1)UDF的方式清理資料 import sys reload(sys) sys.setdefaultencoding('utf8') import re import json from pyspark.sql import SparkSession

函式徑向基函式 (Radial Basis Function 簡稱 RBF)

轉載於 :http://blog.csdn.net/huang1024rui/article/details/51510611 1.核函式 1.1核函式的由來 -----------還記得為何要選用核函式麼?--