詳解Linux下的文件標(biāo)述符和文件指針
Linux下的文件標(biāo)述符和文件指針
文件標(biāo)識(shí)符:
首先我們來(lái)了解一下文件標(biāo)識(shí)符是什么東西?
文件描述符是計(jì)算機(jī)科學(xué)中的一個(gè)術(shù)語(yǔ),是一個(gè)用于表述只想文件的引用的抽象化概念。
在linux當(dāng)中,每個(gè)進(jìn)程會(huì)在進(jìn)程控制塊(PCB)當(dāng)中保存著一份文件描述符表,文件描述符就是這個(gè)表的索引,每個(gè)表都有一個(gè)指
向已經(jīng)打開(kāi)文件的指針。
每個(gè)linux進(jìn)程都應(yīng)該有三個(gè)標(biāo)準(zhǔn)的文件描述符,對(duì)應(yīng)三個(gè)標(biāo)準(zhǔn)流。
| 整數(shù)值 | 名稱 | (unistd.h)符號(hào)常量 | (stdio.h)文件流 |
|---|---|---|---|
| 0 | Standard input | STDIN_FILENO | stdin |
| 1 | Standard output | STDOUT_FILENO | stdout |
| 2 | Standard error | STDERR_FILENO | stderr |
文件描述符在形式上是一個(gè)非負(fù)整數(shù),實(shí)際上,它是一個(gè)索引值,指向內(nèi)核為每一個(gè)進(jìn)程所維護(hù)的該進(jìn)程打開(kāi)文件的記錄表。當(dāng)程
序打開(kāi)一個(gè)現(xiàn)有文件或者創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。在程序設(shè)計(jì)中,一些涉及底層的程序編寫(xiě)往往會(huì)圍
繞著文件描述符展開(kāi)。但是文件描述符這一概念往往只適用于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語(yǔ)言當(dāng)中我們所學(xué)習(xí)的東西,C語(yǔ)言當(dāng)中用一個(gè)指針變量指向一個(gè)文件,這個(gè)指針就被稱為文件指針。通過(guò)文件指針我們可以對(duì)所指的文件進(jìn)行各種的操作。C語(yǔ)言當(dāng)中使用的是文件指針而不是文件描述符做為I/O的句柄。文件指針指向進(jìn)程用戶區(qū)中的一個(gè)被稱為FILE結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。FILE結(jié)構(gòu)包含一個(gè)緩沖區(qū)和一個(gè)文件描述符。
文件指針式C語(yǔ)言的通用的格式,所以相對(duì)來(lái)說(shuō),更加便于移植.
我們通常來(lái)獲取文件指針:
FILE *fp = fopen("test.txt","r");獲取到指針以后,我們就可以獲得指針當(dāng)中文件描述符的信息。
文件描述符是唯一的,但是文件指針不是唯一的,文件指針指向的對(duì)象是唯一的。
文件標(biāo)述符和文件指針的轉(zhuǎn)換:
int fileno(FILE *stream); FILE *fdopen(int fd,const char *mode);
fdopen第一個(gè)參數(shù)是一個(gè)打開(kāi)的文件描述符,mode是表示打開(kāi)方式的字符串,和fopen相同,比如說(shuō)“w”或者“r”.
fileno函數(shù),它返回和文件流對(duì)應(yīng)的文件描述符,失敗返回-1。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
高級(jí)開(kāi)發(fā)運(yùn)維測(cè)試必須掌握的envsubst命令使用詳解
這篇文章主要為大家介紹了高級(jí)開(kāi)發(fā)運(yùn)維測(cè)試必須掌握的envsubst命令使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Linux啟動(dòng)與自啟動(dòng)的實(shí)例詳解
這篇文章主要介紹了Linux啟動(dòng)與自啟動(dòng)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09
使用Shell實(shí)現(xiàn)ini文件的讀寫(xiě)
這篇文章主要為大家詳細(xì)介紹了如何使用Shell實(shí)現(xiàn)ini文件的讀寫(xiě),文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-11-11

