OSLab文件描述符】的更多相关文章

  日期:2019/3/24 内容:Linux文件描述符.   一.基本概念 文件描述符(File Descriptor) 一个非负整数.应用程序利用文件描述符来访问文件.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也需要使用文件描述符来指定待读写的文件. 二.文件读写 头文件的解析 sys/stat.h status fcntl.h file control   int flags参数取值 必须取值:O_RDONLY.O_WRONLY.O_RDWR. 可选取值(两种取值通过 |…
内核使用3种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程的影响. (1) 每个进程在进程表中都有一个纪录项,纪录项中包含一张打开文件描述符表,每个文件描述符各占一项,与每个文件描述符相关的是 a. 文件描述符标志 b. 指向一个文件表项的指针 (2) 内核为所有打开文件维护一张文件表项,每个文件表项包含: a. 文件状态(读 写 同步 非阻塞等) b. 当前文件偏移量 c. 指向改文件V节点(i节点)的指针 (3) 没打开一个文件或设备,都有一个V节点结构,V节…
内核版本:linux-2.6.11 文件描述符(file descriptor)在Linux编程里随处可见,设备读写.网络通信.进程通信,fd可谓是关键中的关键. 深入理解可以增加我们使用它的信心. 该篇笔记主要解释了文件描述符底层的多态实现和文件描述符的生命周期.希望对自己和大家有所帮助. 先看三段简化后的内核代码 sys_open fd = get_unused_fd(); if (fd >= 0) { struct file *f = filp_open(tmp, flags, mode)…
Linux 利用进程打开的文件描述符(/proc)恢复被误删文件 在 windows 上删除文件时,如果文件还在使用中,会提示一个错误:但是在 linux 上删除文件时,无论文件是否在使用中,甚至是还是在写入,都可以被 rm 简单地删除 :-< 不过,rm 删除时并非是被真正地擦除,特别是当文件还在被进程打开时,是可以完整地恢复的. linux 的每个文件对应一个 inode 号,它有两个计数 i_count (内存引用计数,当前使用这个文件的进程数量) 和 i_nlink (磁盘引用计数,硬链…
200 ? "200px" : this.width)!important;} --> 介绍 文件描述符是与文件输入.输出相关联的整数,在编写脚本时会经常使用标准的文件描述符来将内容重定向输出,0.1.2是文件描述符(分别对应stdin.stdout.stderr),< .>, >>叫做操作符. 概念 stdin(0):标准输入,这个概念有点不太容易理解比如:1.使用<从文件中读取内容,2.当前命令将内容通过管道传输给下一个命令而下一个命令,而实际内…
本节讨论一下几个问题: 1. 文件描述符. 2. 重定向. 3. 管道符 4. tee的用法. 1. 文件描述符. 在linux系统中一切皆文件.文件夹和设备都是文件.如何用来区别不同的文件呢?这里的区别不是我们在windows下看到的后缀名不同来区别.也不是我们在linux下用ls 命令看到的不同文件的列表.这里的文件描述符主要讨论的是对文件操作的一个标识符.无操作就无标识符.   比如两个进程同时在对同一个文件进行读操作. 如何区分这两个读操作呢?这就需要文件文件描述符来区别了.每一次打开一…
系统级的限制:/proc/sys/fs/file-max中设定了系统最大能打开的文件数. 查看该值可以用如下方式: [root@#panda ~]# cat /proc/sys/fs/file-max 655351 [root@#panda ~]# sysctl fs.file-max fs.file-max = 655351 [root@#panda ~]# 修改该值可以用如下方式: [root@#panda ~]# echo 655300 > /proc/sys/fs/file-max [r…
一个文件被打开,也可能没有文件描述符,比如current working diretories,memory mapped files and executable text files ;losf可以查岀某个进程打开的文件数目: root@GitLab ~]# sh sh- rpcbind rpc cwd DIR , / rpcbind rpc rtd DIR , / rpcbind rpc txt REG , /sbin/rpcbind rpcbind rpc mem REG , /lib6…
ulimit -n  查看 单进程或线程,可打开的最大文件描述符数 通过ulimit -n 10240 设置文件描述符数: (当前shell生效,这真是个坑啊) 永久生效:(需要重启系统,也是个坑,好好的系统是不会去重启的)[root@linux2 ~]# cat /etc/security/limits.conf *   soft    nofile   65535*   hard   nofile   65535*   soft   nproc   65535*   hard   nproc…
#!/bin/bash      最近在看shell,各种困惑,不过解决困惑的感觉还是很不错的.废话少说,linux中使用文件描述符来标识每个文件对象.文件描述符为一个非负整数,可以唯一标识会话中打开的文件.每个过程最多可以有9个文件描述符.     linux使用的标准文件描述符:     标准输入STDIN就是0,标准输出STDOUT就是1,标准错误输出STDERR就是2.而我们也可以自己创建文件描述符3~8.     将今天看到的一段代码: 1    #!/bin/bash 2    ex…
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239   1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此…
转自:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新…
转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp. open:文件描述符的操作(如: open)返回的是一个文件描述符(int fd),内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用(fd1,fd2,fd3...); fopen:而流(如: f…
前言 在Linux系统中,一切设备都看作文件.而每打开一个文件,就有一个代表该打开文件的文件描述符.程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,标准错误输出文件stderr,分别得到文件描述符 0, 1, 2. 实例 现在来看一个 测试ttyname函数的实例(ttyname函数功能是返回在该文件描述符上打开的终端设备的路径名): #include "apue.h" int main(void) { char *name; if(isatty…
Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也需要使用文件描述符来指定待读写的文件. 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开…
http://blog.csdn.net/kumu_linux/article/details/7877770 文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket.第一个打开的文件是0,第二个是1,依此类推.Unix操作系统通常给每个进程能打开的文件数量强加一个限制.更甚的是,unix通常有一个系统级的限制.在UNIX/Linux平台上,对于控制台(Console)的标准输入(0),标准输出(1),标准错误(2)输出也对应了三个文件描述符. 对于squid,因为squid…
http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件…
1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l…
本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果…
使用四种框架分别实现百万websocket常连接的服务器 著名的 C10K 问题提出的时候, 正是 2001 年.这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务这个问题,当时因为硬件和软件的**,单机1万还是一个非常值得挑战的目标.但是时光荏苒,随着硬件和软件的飞速发展,单机1万的目标已经变成了最简单不过的事情.现在用任何一种主流语言都能提供单机1万的并发处理的能力.所以现在目标早已提高了100倍,变成C1000k,也就是一台服务器为100万连接提供服务.…
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括:     1.linux多/单进程与多/单文件对于文件流和描述符在使用时的关联情况及一些需要注意的问题.     2.fork,vfork流缓冲等对文件操作的影响.   1.linux文件系统结构 首先补充一点基础知识,了解一下linux文件系统.如下图所示:                        …
文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec前是否要关闭这个文件描述符.要把文件描述符标志和文件状态标志区分开来. 文件状态标志:在系统内核维护的系统打开文件表中,每一个系统文件表项都有一个关于write.read等的标志. close-on-exec是一个进程所有文件描述符(文件句柄)的位图标志,每个比特位代表一个打开的文件描述符的标志位,…
最近在看<精通unix shell脚本编程>时,看到exec<$1 exec 1>$OUTFILE,一下看的我就蒙了.网上看了大半天,终于搞定,记录如下.对于 Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的.文件描述符是一个非负的整数,它是一个索引值,并指向内核中每个进程打开文件的记录表.当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数.通常,一个进程启动时,都会打开 3 个文件:标…
inode 或i节点是指对文件的索引.如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等.就像书本的目录一样,便于查找和管理.这目录是操作系统需要的,用来找文件或叫管理文件.许多操作系统都用到这个概念,如linux, 某些嵌入式文件系统等.当然,对某个系统来说,有许多i节点.所以对i节点本身也是要进行管理的. 在linux中,内核通过inode来找到每个文件,但一个文件可以被许多用户同时打开或一个用户同时打开多次.这就有一个问题,如何管理文件…
一般lsof 会输出以下这些信息: COMMAND: 进程的名称 PID:进程标识符 PPID:父进程标识符(需要指定-R参数) USER:进程所有者 PGID:进程所属组 FD:文件描述符,应用程序通过文件描述符识别该文件. TYPE:文件类型.如 DIR.REG等 DEVICE:指定磁盘的名称 SIZE:文件的大小 NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称 这篇重点是讲一下FD文件描述符,因为在lsof 中这个内容占了很大的一个篇幅,我又一向崇尚精简,所以把它单…
文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket.第一个打开的文件是0,第二个是1,依此类推.Unix 操作系统通常给每个进程能打开的文件数量强加一个限制.更甚的是,unix 通常有一个系统级的限制.因为squid 的工作方式,文件描述符的限制可能会极大的影响性能.当squid 用完所有的文件描述符后,它不能接收用户新的连接.也就是说,用完文件描述符导致拒绝服务.直到一部分当前请求完成,相应的文件和socket 被关闭,squid 不能接收新请求.当squid发现文件描…
linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件 linux默认文件描述符 每打开一个shell就会打开默认的三个文件描述符描0,1,2,分别代表标准输入,标准输出和标准错误输出. exec命令关联文件描述符 exec 5>/tmp/a.txt 读方式 exec 5</tmp/a.txt 写方式 exec 5<>/tmp/a.txt 读写方式 exec 5<&-;exec5>&- 关闭文件描述…
1. 文件描述符(重点) 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3. 1.1概念介绍 文件描述符的操作(如: open(),creat(),cl…
转载自http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp. 文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用; 而流(如: fopen)返回的是一个FILE结构指针, FILE结构是包含有文件描述…
if (events[i].data.fd == listenfd) { peerlen = sizeof(peeraddr); connfd = ::accept4(listenfd, (struct sockaddr*)&peeraddr, &peerlen, SOCK_NONBLOCK | SOCK_CLOEXEC); if (connfd == -1)//函数发生错误 { if (errno == EMFILE)//表示每个进程允许打开的文件描述符数量最大值已经到达 {//遇到这种…