STDIN_FILENO的作用及與stdin 的區別
1.STDIN_FILENO的作用
STDIN_FILENO屬於系統API介面庫,其宣告為 int 型,是一個開啟檔案控制程式碼,對應的函式主要包括 open/read/write/close 等系統級呼叫。
作業系統一級提供的檔案API都是以檔案描述符來表示檔案。STDIN_FILENO就是標準輸入裝置(一般是鍵盤)的檔案描述符。
2.區別
1)資料型別不一致:
stdin型別為 FILE*
STDIN_FILENO型別為 int
使用stdin的函式主要有:fread、fwrite、fclose等,基本上都以f開頭
使用STDIN_FILENO的函式有:read、write、close等
2)stdin等是FILE *型別,屬於標準I/O,高階的輸入輸出函式。在<stdio.h>。
STDIN_FILENO等是檔案描述符,是非負整數,一般定義為0, 1, 2,屬於沒有buffer的I/O,直接呼叫系統呼叫,在<unistd.h>。
3)STDIN_FILENO 是標準輸入的檔案描述符
詳見/usr/include/unistd.h
程式碼:
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
4)層次不一樣。STDIN
屬於標準庫處理的輸入流,其宣告為 FILE 型的,對應的函式前面都有f開頭,如fopen/fread/fwrite/fclose 標準庫呼叫等
STDIN_FILENO屬於系統API介面庫,其宣告為 int 型,是一個開啟檔案控制程式碼,對應的函式主要包括 open/read/write/close 等系統級呼叫。
標準庫內封裝了系統 API 呼叫,如 fread 內部實現呼叫 read。
5)作業系統一級提供的檔案API都是以檔案描述符來表示檔案。STDIN_FILENO就是標準輸入裝置(一般是鍵盤)的檔案描述符。
6)曾經很納悶,為什麼一個整形fd(STDIN_FILENO=0)就可以代表一個開啟的檔案呢?
後來明白了,和我們的手機號是類似的,手機號只是一個9位數的整形,但是在移動通話網路裡,它就可以用來區分不同的手機終端。
標準C++一級提供的檔案操作函式庫都是用FILE*來表示檔案,stdin就是指向標準輸入裝置檔案的FILE*。
相關文章
- STDIN_FILENO與STDIN的區別
- 對stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的學習
- 原碼、反碼、補碼及移碼的作用與區別
- PHP7 ?? 與 ?: 的作用和區別PHP
- 關於重定向符>>與>的區別與作用
- jquery的$.extend和$.fn.extend作用及區別jQuery
- async與defer的作用與區別以及阻塞優化優化
- C#中continue、return、break的區別及作用C#
- Redis的配置及與memcached區別Redis
- Java Web中requset,session,application 的作用域及區別JavaWebSessionAPP
- call apply bind的作用及區別? 應用場景?APP
- python語言中類和函式的作用及區別!Python函式
- Gerrit的用法及與gitlab的區別Gitlab
- dll、Lib、obj、.h檔案的區別與作用OBJ
- ABAP 中的表型別及作用型別
- ajax與jsonp的區別及用法JSON
- MySQL與SQLite的區別及遷移MySqlSQLite
- thchnique 與 technology的區別及用法
- CSS中的class與id區別及用法CSS
- exists和not exists及in和not in的用法與區別
- java字串“==”與“equals”的差異及與c#的區別Java字串C#
- c# get_type與typeof方法的區別與聯絡和作用C#
- 《Node.js》path.resolve與path.join的區別與作用Node.js
- ??與?:的區別
- Python中eval與exec的使用及區別Python
- Truncate table 詳解及與delete,drop 的區別delete
- Truncate table詳解及與delete,drop的區別delete
- [精選] SQL中的IN與NOT IN、EXISTS與NOT EXISTS的區別及效能分析SQL
- MySQL的@與@@區別MySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- in與exist , not in與not exist 的區別
- 對線面試官:SQL中的IN與NOT IN、EXISTS與NOT EXISTS的區別及效能分析面試SQL
- enqueue, latch的理解及區別ENQ
- 好程式設計師Python培訓分享print和return的作用及區別程式設計師Python
- CSS偽類與CSS偽元素的區別及由來CSS
- EXTJs 中icon 與iconCls的區別及用法!JS
- javascript中break和continue的區別和作用JavaScript