linux緩存文件描述符
① linux文件描述符表和文件的關系
Linux中的文件類型
Linux系統中把一切都看做文件,包括普通文件-、目錄文件d、字元設備文件c、塊設備文件b、符號鏈接文件l。文件描述符是內核為了高效管理已被打開的文件所創建的索引(一個非負整數),用於指代已被打開的文件,Linux下所有的的I/O操作的系統調用都是通過文件描述符執行。例如0表示標准輸入、1表示標准輸出、3表示標准錯誤
,文件描述符會在這個基礎上遞增。
文件描述符、文件、進程之間的關系
每個文件描述符都指向一個打開的文件相對應
不同的文件描述符可能指向同一個打開的文件
相同的文件可能被不同的進程打開,也可以在被同一個進程打開多次
文件描述符表:
進程級的列表,也就是用戶區的一部分,進程每打開一個文件就會新建一個文件描述符,同時只能通過文件描述符的函數訪問,否則進程無法直接對其進行訪問。
系統文件表:
系統級的列表,對當前系統的所有進程都共享,每條條目包含文件偏移量、訪問模式以及指向它的文件描述符的條目計數
文件系統索引節點表:
inode索引節點表(UID、GID、ctime、mtime、atime、讀寫執行許可權、鏈接數、block位置)
② 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文件描述符是一個整數,所以打開過多的文件就會溢出。
④ linux read(0,buf,100)其中的fd=0是什麼意思
shell下輸入「man 2 read 」 你先看看。
ssize_t read(int fd, void *buf, size_t count);
意義:從文件描述符fd所指向的文件中讀取count個位元組的數據到buf所指向的緩存中。
文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件。
文件描述符0代表標准文件。
fd是這么來的。
fd=(open或creat成功調用時的返回值)。
我上學是書上就寫這么多了。
⑤ linux怎樣獲取文件描述符
Linux下的文件描述符是一個整型數,是對一個文件的標識,fopen打開一個文件就會返回一個相應的文件描述符
⑥ linux下重定向前後printf的輸出緩存機制怎麼變化
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
fflush(stdout);
setvbuf(stdout,NULL,_IONBF,0);
printf("test stdout\n");
int save_fd = p(STDOUT_FILENO); // 保存標准輸出 文件描述符 注:這里一定要用 p 復制一個文件描述符. 不要用 = 就像是Winodws下的句柄.
int fd = open("test1.txt",(O_RDWR | O_CREAT), 0644);
p2(fd,STDOUT_FILENO); // 用我們新打開的文件描述符替換掉 標准輸出
printf("test file\n");
//再恢復回來標准輸出. 兩種方式
//方法1 有保存 標准輸出的情況
//p2(save_fd,STDOUT_FILENO);
//方法2 沒有保存 標准輸出的情況
int ttyfd = open("/dev/tty",(O_RDWR), 0644);
p2(ttyfd,STDOUT_FILENO);
printf("test tty\n");
}
⑦ 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 文件描述符最大是多少怎麼計算的
最大值是系統相關的,linux shell 輸入如下命令就知道,其中的「-n: file descriptors」就是最大限制值。
# ulimit -a
-f: file size (blocks) unlimited
-t: cpu time (seconds) unlimited
-d: data seg size (kb) unlimited
-s: stack size (kb) 8192
-c: core file size (blocks) 0
-m: resident set size (kb) unlimited
-l: locked memory (kb) 64
-p: processes 128
-n: file descriptors 1024
-v: address space (kb) unlimited
-w: locks unlimited
-e: scheling priority 0
-r: real-time priority 0
⑨ linux 下/tmp是什麼文件
1、/tmp文件是linux運行時產生的緩存文件,用於加速二次打開文件的速度。
2、/tmp文件在linux關機時會被系統預設指令刪除的。
⑩ linux下的文件描述符是什麼
文件描述符是一個很小的正整數,是打開的文件在內核中的索引.