採用系統呼叫的方式讀取資料

2021-09-05 10:13:22 字數 1999 閱讀 8139

c語言c++中有很多方式輸入字元或者資料,比如scanf gets函式c++中有cin函式,本次實驗重點實現採用系統呼叫實現輸入字元。採用read函式實現。

本次實驗的環境為ubuntu16.04 編譯器是gcc 5.4版本

#include #include #include #include #include #include #include #include #include #define err_exit(m)			\

do \

while(0)

int main()

; int ret = 0;

ret = read(0,buf,1024);

if(ret == -1)

printf("buf=%s\n",buf);

return 0;

}

read函式中的引數解釋一下,第乙個引數0為檔案描述符,0號檔案描述符為輸入檔案描述符,所以用0,1為輸出檔案描述符,2位錯誤檔案描述符,這三個檔案描述符是預設開啟的。第二個引數是buf乙個快取區的意思,再次之前申明了buf為乙個1024字元的char型字串,假如你想輸入int型資料修改buf資料型別即可。buf為你輸入資料的乙個快取區,也是存放到記憶體中的。第三個引數1024 為你需要輸入的字元的有幾個,1024對應的是buf的大小。意思的每次輸入最大為1024個字元。

ret為read返回值,成功返回檔案描述符沒失敗返回-1.

實驗結果:

最後printf  buf 中的資料即可。

當然你可以用系統呼叫write函式輸出字元,注釋掉printf函式用write函式代替即可。

即 write(1,buf,1024);

write函式中和read函式一樣。第乙個引數為檔案描述符,1是輸出檔案描述符。buf是快取區,1024是快取大小。

#include #include #include #include #include #include #include #include #include #define err_exit(m)			\

do \

while(0)

int main()

; int ret = 0;

ret = read(0,buf,1024);

if(ret == -1)

// printf("buf=%s\n",buf);

write(1,buf,1024);

return 0;

}

最後的結果是

感覺不如printf函式好看,沒有buf= 的字樣,你想有這個字樣的話,還需要加幾行**比如:

char buf1[1024] = ;

write(1,buf1,1024);

算了,貼上全部的**吧:

#include #include #include #include #include #include #include #include #include #define err_exit(m)			\

do \

while(0)

int main()

; int ret = 0;

ret = read(0,buf,1024);

if(ret == -1)

// printf("buf=%s\n",buf);

char buf1[1024] = ;

write(1,buf1,1024);

write(1,buf,1024);

return 0;

}

輸出的結果為:

基本和printf函式相似。 

採用不同方式讀取資料流

一般我們用行輸入操作符 讀取資料流,如果是標量上下文,就返回一行,如果是列表上下文,就返回資料流中所有的資料。總體而言,一次讀取一行的方式在時間和記憶體的開銷上效率最高的。my contents do 可以選用file slurp 模組替代我們完成。use file slurp my text re...

微服務採用何種遠端呼叫方式?

無論是微服務還是soa,都面臨著服務間的遠端呼叫。那麼服務間的遠端呼叫方式有哪些呢?常見的遠端呼叫方式有以下幾種 rpc,即 remote procedure call 遠端過程呼叫 是乙個計算機通訊協議。該協議允許執行於一台計算機的程式呼叫另一台計算機的子程式,而程式設計師無需額外地為這個互動作用...

android 採用post的方式提交資料

get 內部實現是組拼 url的方式,協議規定最大長度 4kb,ie瀏覽器限制 1kb post和 get的區別比較了一下,多了幾條資訊 content length 93 主體內容 呼叫httpurlconnection 物件的setrequestmethod post 方法 呼叫httpurlc...