導航:首頁 > 源碼編譯 > linux文件描述符源碼

linux文件描述符源碼

發布時間:2022-07-29 05:19:28

linux怎樣獲取文件描述符

Linux下的文件描述符是一個整型數,是對一個文件的標識,fopen打開一個文件就會返回一個相應的文件描述符

Ⅱ LINUX可以創建一個「」虛擬文件描述符「么

文件描述符是一個簡單的整數,用以標明每一個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。Unix操作系統通常給每個進程能打開的文件數量強加一個限制。更甚的是,unix通常有一個系統級的限制。在UNIX/Linux平台上,對於控制台(Console)的標准輸入(0),標准輸出(1),標准錯誤(2)輸出也對應了三個文件描述符。

對於squid,因為squid 的工作方式,文件描述符的限制可能會極大的影響性能。當squid 用完所有的文件描述符後,它不能接收用戶新的連接。也就是說,用完文件描述符導致拒絕服務。直到一部分當前請求完成,相應的文件和socket 被關閉,squid不能接收新請求。當squid發現文件描述符短缺時,它會發布警告。

對於Apache,當使用了很多虛擬主機,而每個主機又使用了不同的日誌文件時,Apache可能會遭遇耗盡文件描述符(有時也稱為file handles)的困境。 Apache使用的文件描述符總數如下:每個不同的錯誤日誌文件一個、 每個其他日誌文件指令一個、再加10~20個作為內部使用。Unix操作系統限制了每個進程可以使用的文件描述符數量。典型上限是64個,但可以進行擴充,直至到達一個很大的硬限制為止(a large hard-limit)。

Ⅲ linux 中,怎樣使用文件描述符

你說的是在shell里的應用吧,主要是重定向的時候用的多。

Bash的輸入輸出重定向,裡面有一些例子,估計是你想要的:
http://www.linux-wiki.cn/index.php/Bash%E7%9A%84%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91

Ⅳ linux源碼分析

linux的tcp-ip棧代碼的詳細分析

1.數據結構(msghdr,sk_buff,socket,sock,proto_ops,proto)

bsd套接字層,操作的對象是socket,數據存放在msghdr這樣的數據結構:

創建socket需要傳遞family,type,protocol三個參數,創建socket其實就是創建一個socket實例,然後創建一個文件描述符結構,並且互相建立一些關聯,即建立互相連接的指針,並且初始化這些對文件的寫讀操作映射到socket的read,write函數上來。

同時初始化socket的操作函數(proto_ops結構),如果傳入的type參數是STREAM類型,那麼就初始化為SOCKET->ops為inet_stream_ops,如果是DGRAM類型,則SOCKET-ops為inet_dgram_ops。對於inet_stream_ops其實是一個結構體,包含了stream類型的socket操作的一些入口函數,在這些函數里主要做的是對socket進行相關的操作,同時通過調用下面提到的sock中的相關操作完成socket到sock層的傳遞。比如在inet_stream_ops里有個inet_release的操作,這個操作除了釋放socket的類型空間操作外,還通過調用socket連接的sock的close操作,對於stream類型來說,即tcp_close來關閉sock

釋放sock。

創建socket同時還創建sock數據空間,初始化sock,初始化過程主要做的事情是初始化三個隊列,receive_queue(接收到的數據包sk_buff鏈表隊列),send_queue(需要發送數據包的sk_buff鏈表隊列),backlog_queue(主要用於tcp中三次握手成功的那些數據包,自己猜的),根據family、type參數,初始化sock的操作,比如對於family為inet類型的,type為stream類型的,sock->proto初始化為tcp_prot.其中包括stream類型的協議sock操作對應的入口函數。

在一端對socket進行write的過程中,首先會把要write的字元串緩沖區整理成msghdr的數據結構形式(參見linux內核2.4版源代碼分析大全),然後調用sock_sendmsg把msghdr的數據傳送至inet層,對於msghdr結構中數據區中的每個數據包,創建sk_buff結構,填充數據,掛至發送隊列。一層層往下層協議傳遞。一下每層協議不再對數據進行拷貝。而是對sk_buff結構進行操作。

Ⅳ 關於Linux文件描述符的~

應該是運行完後將結果寫入fd4.out這個文件吧.
gcc編譯c文件就是自動生成個.out文件將程序運行結果寫進去方便查看

Ⅵ Linux文件描述符表和文件的關系

Linux中的文件類型
Linux系統中把一切都看做文件,包括普通文件-、目錄文件d、字元設備文件c、塊設備文件b、符號鏈接文件l。文件描述符是內核為了高效管理已被打開的文件所創建的索引(一個非負整數),用於指代已被打開的文件,Linux下所有的的I/O操作的系統調用都是通過文件描述符執行。例如0表示標准輸入、1表示標准輸出、3表示標准錯誤
,文件描述符會在這個基礎上遞增。

文件描述符、文件、進程之間的關系
每個文件描述符都指向一個打開的文件相對應
不同的文件描述符可能指向同一個打開的文件
相同的文件可能被不同的進程打開,也可以在被同一個進程打開多次
文件描述符表: 進程級的列表,也就是用戶區的一部分,進程每打開一個文件就會新建一個文件描述符,同時只能通過文件描述符的函數訪問,否則進程無法直接對其進行訪問。
系統文件表: 系統級的列表,對當前系統的所有進程都共享,每條條目包含文件偏移量、訪問模式以及指向它的文件描述符的條目計數
文件系統索引節點表: inode索引節點表(UID、GID、ctime、mtime、atime、讀寫執行許可權、鏈接數、block位置)

Ⅶ Linux查看進程打開多少文件描述符命令

可用lsof命令,可以列出被進程所打開的文件的信息。被打開的文件可以是:

1普通的文件,2.目錄 3.網路文件系統的文件,4.字元設備文件 5.(函數)共享庫 6.管道,命名管道 7.符號鏈接 8.底層的socket字流,網路socket,unix域名socket 各個命令的詳細介紹可看下「Linux命令大全」

Ⅷ linux下的文件描述符是什麼

文件描述符是一個很小的正整數,是打開的文件在內核中的索引.

Ⅸ linux 文件描述符最大是多少

人們常說linux最大有65536個文件描述符,是由於常用linux內核的默認值決定的,實際上是可以通過修改內核突破的。
了解下文件描述符,內核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。
文件描述符的有效范圍是 0 到 OPEN_MAX。一般來說,每個進程最多可以打開 64 個文件(0 — 63)。對於 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 來說,每個進程最多可以打開文件的多少取決於系統內存的大小,int 的大小,以及系統管理員設定的限制。Linux 2.4.22 強制規定最多不能超過 1,048,576 。

閱讀全文

與linux文件描述符源碼相關的資料

熱點內容
音樂噴泉軟體要什麼加密狗 瀏覽:491
androidhttpmime 瀏覽:774
威科夫操盤法pdf 瀏覽:981
演算法可以用圖表表示 瀏覽:948
山西太原php 瀏覽:273
常用cmd網路命令 瀏覽:676
hashmap7源碼分析 瀏覽:898
搜索引擎原理技術與系統pdf 瀏覽:361
運動估計演算法python 瀏覽:860
java正則1 瀏覽:538
redhatlinux最新 瀏覽:182
python字典編程詞彙 瀏覽:147
微信和伺服器如何通訊 瀏覽:13
百家號伺服器配置有什麼用 瀏覽:600
怎麼為電腦加密 瀏覽:59
伺服器出現差錯是什麼意思 瀏覽:619
蘋果app移到商店裡怎麼刪掉 瀏覽:257
phpjsphtml 瀏覽:66
吃雞手機國際服伺服器超時怎麼辦 瀏覽:69
努比亞Z5無命令 瀏覽:642