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下的文件描述符是什么
文件描述符是一个很小的正整数,是打开的文件在内核中的索引.