檔案IO 檔案描述符

2021-10-09 18:26:39 字數 2242 閱讀 4873

a  file descriptor, a small, nonnegative integer for use in 

subsequent system calls (read(2), write(2), lseek(2), fcntl(2), etc.)

--from man 2.6.3

當開啟或者建立乙個新的檔案時,核心向程序返回乙個檔案描述符

用此檔案描述符就能讀寫檔案

linux一切皆檔案,拿到檔案描述符,就拿到了linux的鑰匙

標準輸出檔案描述符、標準輸入檔案描述符、標準錯誤檔案描述符

/* standard file descriptors.  */

#define stdin_fileno 0 /* standard input. */

#define stdout_fileno 1 /* standard output. */

#define stderr_fileno 2 /* standard error output. */

---from

使用ulimit -n 進行檔案描述符設定當前程序

[para ~]$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 7271

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 65535 --> 檔案描述符限制 65535個

pipe size (512 bytes, -p) 8

posix message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 8192

cpu time (seconds, -t) unlimited

max user processes (-u) 4096

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

設定永久生效最大檔案描述符限制

修改 /etc/security/limits.conf

#end of file

root soft nofile 65535

root hard nofile 65535

para soft nofile 1024

para hard nofile 1024

* soft nofile 65535

* hard nofile 65535

[para ~]$ ulimit -n

1024

程序pcb中維護乙個檔案描述符表,該錶的索引值從0開始

每個程序都有自己的pcb塊,當然也有屬於自己的檔案描述符表

此圖由unix環境高階程式設計書籍而來,網上說 linux系統只使用i節點,而不使用v節點 ,知道方法再細研究此問題。

(1)程序拿到檔案描述符fd --> 通過檔案描述符表拿到對應檔案描述符指標

(2)通過指標找到檔案表的偏移量,再通過檔案偏移找到當前檔案指標的位置

(3)在通過i節點資訊去檔案系統進行具體操作

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...

基礎IO與檔案描述符

一 引題 之前我們講過c標準庫提供的io函式fread,fwrite等,那麼它們到底是怎麼實現的呢?它們是真的靠自己寫出來的嗎?不一定?我們先來看看關於作業系統的概念圖 功能 開啟 和建立檔案 引數 pathname 待開啟 建立檔案的路徑名 flags 開啟模式 o rdonly唯讀模式 o wr...

檔案描述符

檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...