当前位置: 首页 > Linux

linux-文件描述符

时间:2023-04-06 02:10:18 Linux

介绍内核(kernel)使用文件描述符(filedescriptor)来访问文件。1、系统为每个进程维护一个文件描述符表。表的值从0开始,所以你会在不同的进程中看到相同的文件描述符。在这种情况下,同一个文件描述符可能指向同一个文件,也可能指向不同的文件。2、每个文件描述符都会对应一个打开的文件,同时不同的文件描述符也会指向同一个文件。同一个文件可以被不同的进程打开,也可以在同一个进程中打开多次。3、传统上标准输入(standardinput)的文件描述符为0,标准输出(standardoutput)为1,标准错误(standarderror)为20、1、2分别对应标准输入、标准输出、错误output3并且以后对应打开文件描述符的最大限制,查看一个进程最多可以容纳的文件描述符数量[root@VM_158_86_centos~]#ulimit-n100001临时修改文件描述符数量命令[root@VM_158_86_centos~]#ulimit-HSn65536[root@VM_158_86_centos~]#ulimit-n165536永久修改文件描述符个数[root@VM_158_86_centos~]#cat/etc/security/limits.conf#/etc/security/limits.confrootsoftnofile100001roothardnofile100002文件句柄。文件描述符和进程之间的关系。文件句柄和文件描述符的作用:帮助系统或进程找到文件对象在内存中的位置。普通打开文件。父进程和子进程之间的文件共享。普通打开文件。子进程会fork父进程,所以会和父进程的文件描述符表一样,所以分享一下父进程打开过的文件的核心思想:因为每个进程都有自己的HANDLE储存空间;如果是同一个进程的线程,因为基于I/O多路复用使用的流,多个线程运行在单个进程的上下文中,共享进程虚拟地址空间的全部内容,包括它的代码,数据、堆、共享库和打开的文件(句柄)。2>&1的含义0是标准输入1是标准输出2是标准错误输出含义:将标准错误输出重定向到标准输出符号>&是一个整体,不能分开。分开之后,就不是上面的意思了。例如,有人可能会想:2是标准错误输入,1是标准输出,>是重定向符号,那么“将标准错误输出重定向到标准输出”应该写成“2>1”吗?是这样吗?如果你试过就会知道,2>1的写法其实就是将标准错误输出重定向到一个名为“1”的文件中来写2&>1。为什么2>&1要放在后面考虑下面一条shell命令nohupjava-jarapp.jar>log2>&1&为什么2>&1一定要写在>log之后,表示标准错误输出和标准输出都是定向的到日志?我们不妨把1和2都理解为一个指针,然后这样看上面的语句:本来1----->screen(1指向屏幕)执行完>log,1----->log(1指向log)执行完2>&1,2----->1(2指向1,1指向log,所以2也指向log)然后分析nohupjava-jarapp.jar2>&1>log&原来1----->screen(1指向屏幕)执行完2>&1,2----->1(2指向1,1指向屏幕,所以2也指向屏幕)执行>log后,1----->log(1指向日志,2仍然指向屏幕)所以这不是我们想要的结果。参考地址文件描述符及过程:https://my.oschina.net/iuranu...文件描述符2>$https://blog.csdn.net/zhaomin...