詳解Linux下的文件標述符和文件指針
Linux下的文件標述符和文件指針
文件標識符:
首先我們來了解一下文件標識符是什么東西?
文件描述符是計算機科學中的一個術(shù)語,是一個用于表述只想文件的引用的抽象化概念。
在linux當中,每個進程會在進程控制塊(PCB)當中保存著一份文件描述符表,文件描述符就是這個表的索引,每個表都有一個指
向已經(jīng)打開文件的指針。
每個linux進程都應(yīng)該有三個標準的文件描述符,對應(yīng)三個標準流。
| 整數(shù)值 | 名稱 | (unistd.h)符號常量 | (stdio.h)文件流 |
|---|---|---|---|
| 0 | Standard input | STDIN_FILENO | stdin |
| 1 | Standard output | STDOUT_FILENO | stdout |
| 2 | Standard error | STDERR_FILENO | stderr |
文件描述符在形式上是一個非負整數(shù),實際上,它是一個索引值,指向內(nèi)核為每一個進程所維護的該進程打開文件的記錄表。當程
序打開一個現(xiàn)有文件或者創(chuàng)建一個新文件時,內(nèi)核向進程返回一個文件描述符。在程序設(shè)計中,一些涉及底層的程序編寫往往會圍
繞著文件描述符展開。但是文件描述符這一概念往往只適用于UNIX、Linux這樣的操作系統(tǒng)
與文件描述符相關(guān)的操作:
| 功能 | 操作 |
|---|---|
| 文件描述符生成 | open()、socket()、pipe()等 |
| 與單一文件描述符相關(guān)的操作 | read()、write()、send()、fchmod()等 |
| 與復(fù)數(shù)文件描述符相關(guān)的操作 | select()、poll()等 |
| 與文件描述符表相關(guān)度的操作 | close()、dup()等 |
文件指針:
文件指針是C語言當中我們所學習的東西,C語言當中用一個指針變量指向一個文件,這個指針就被稱為文件指針。通過文件指針我們可以對所指的文件進行各種的操作。C語言當中使用的是文件指針而不是文件描述符做為I/O的句柄。文件指針指向進程用戶區(qū)中的一個被稱為FILE結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。FILE結(jié)構(gòu)包含一個緩沖區(qū)和一個文件描述符。
文件指針式C語言的通用的格式,所以相對來說,更加便于移植.
我們通常來獲取文件指針:
FILE *fp = fopen("test.txt","r");獲取到指針以后,我們就可以獲得指針當中文件描述符的信息。
文件描述符是唯一的,但是文件指針不是唯一的,文件指針指向的對象是唯一的。
文件標述符和文件指針的轉(zhuǎn)換:
int fileno(FILE *stream); FILE *fdopen(int fd,const char *mode);
fdopen第一個參數(shù)是一個打開的文件描述符,mode是表示打開方式的字符串,和fopen相同,比如說“w”或者“r”.
fileno函數(shù),它返回和文件流對應(yīng)的文件描述符,失敗返回-1。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Linux 進程替換(exec函數(shù))實現(xiàn)代碼
這篇文章主要介紹了Linux 進程替換(exec函數(shù))實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05
關(guān)于shell的幾個不為人知卻十分有用的命令分享
這篇文章主要介紹了關(guān)于shell的幾個不為人知卻十分有用的命令,需要的朋友可以參考下2016-03-03
shell腳本ssh遠程執(zhí)行命令給變量賦值的問題解決
本文主要介紹了shell腳本ssh遠程執(zhí)行命令給變量賦值的問題解決,就是從A機器通過SSH方式到B機器,并執(zhí)行相關(guān)的命令,具有一定的參考價值,感興趣的可以了解一下2023-07-07
Linux shell 獲得字符串所在行數(shù)及位置的方法
這篇文章主要介紹了Linux shell 獲得字符串所在行數(shù)及位置的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08

