`
shixiaomu
  • 浏览: 382851 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux 文件描述符

 
阅读更多


  .每一个进程都有自己的文件描述符集合.

  .当创建进程时,通常有3个打开文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO.

  .当多个描述符指向同一个文件,每个文件描述符仍保持他独特的性能.

  .由于文件描述符在一个进程中是特有的,因此不能在多个进程中间实现共享,而唯一的例外是在父/子进程之间,当一个进程调用fork时,调用fork时打开的所有文件在子进程和父进程中仍然是打开的,而且子进程写入文件描述符会影响到父进程的同一文件描述符,反之亦然.




  .每一个进程都有自己的文件描述符集合.

  .当创建进程时,通常有3个打开文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO.

  .当多个描述符指向同一个文件,每个文件描述符仍保持他独特的性能.

  .由于文件描述符在一个进程中是特有的,因此不能在多个进程中间实现共享,而唯一的例外是在父/子进程之间,当一个进程调用fork时,调用fork时打开的所有文件在子进程和父进程中仍然是打开的,而且子进程写入文件描述符会影响到父进程的同一文件描述符,反之亦然.


我们发现lsof不只是显示文件描述符,在lsof输出的最后四个文件是该进程的打开文件的文件描述符,0u代表的文件描述符为0,而255u代表的文件描述符为255,u的意思为可读可写.

  除了这四个文件描述符外,在FD一栏还有cwd,rtd,txt,mem等几种类型,它们的意义如下:

  cwd代表当前目录,这里是/root

  rtd代表根目录,这里是/

  txt代表执行的程序,这里是/bin/bash

  mem代表映射到内存的文件,这里是/lib/libc-2.7.so等动态链接库

  TYPE一栏表示文件/目录的类型,DIR代表目录,REG代表普通文件,CHR代表字符设备.

  我们在伪终端1,执行vi -d /etc/hosts /etc/mtab

  在伪终端2,用lsof查看打开的文件.

  lsof -p 6195

  COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

  vi 6195 root cwd DIR 0,3 0 1 /proc

  vi 6195 root rtd DIR 8,1 4096 2 /

  vi 6195 root txt REG 8,1 1699024 686572 /usr/bin/vim.basic

  vi 6195 root mem REG 8,1 47520 147727 /lib/libnss_files-2.7.so

  vi 6195 root mem REG 8,1 43472 147716 /lib/libnss_nis-2.7.so

  vi 6195 root mem REG 8,1 88968 147720 /lib/libnsl-2.7.so

  vi 6195 root mem REG 8,1 31536 147722 /lib/libnss_compat-2.7.so

  vi 6195 root mem REG 8,1 4636768 782032 /usr/lib/locale/locale-archive

  vi 6195 root mem REG 8,1 17424 147652 /lib/libattr.so.1.1.0

  vi 6195 root mem REG 8,1 14616 147734 /lib/libdl-2.7.so

  vi 6195 root mem REG 8,1 1375536 147730 /lib/libc-2.7.so

  vi 6195 root mem REG 8,1 23616 767588 /usr/lib/libgpm.so.2.0.0

  vi 6195 root mem REG 8,1 29360 147707 /lib/libacl.so.1.1.0

  vi 6195 root mem REG 8,1 109464 146602 /lib/libselinux.so.1

  vi 6195 root mem REG 8,1 256288 147710 /lib/libncurses.so.5.7

  vi 6195 root mem REG 8,1 119288 147733 /lib/ld-2.7.so

  vi 6195 root 0u CHR 136,0 2 /dev/pts/0

  vi 6195 root 1u CHR 136,0 2 /dev/pts/0

  vi 6195 root 2u CHR 136,0 2 /dev/pts/0

  vi 6195 root 4u REG 8,1 12288 480777 /etc/.hosts.swp

  vi 6195 root 5u REG 8,1 12288 482077 /etc/.mtab.swp

  我们看到vi创建了临时文件/etc/.hosts.swp和/etc/.mtab.swp,同时它的执行程序是/usr/bin/vim.basic,应该是确实是vi的二进制程序.

  cwd是/proc,说明伪终端1下的当前目录是/proc。

  其实我们可以通过w确认当前系统的伪终端,再通过lsof|grep 'pts/0'查看使用该伪终端的PID,最后用lsof -p PID查看该用户在做什么.

  如果有具体的用户名,可以直接用lsof -u username来查看该用户当前加载的文件.

分享到:
评论

相关推荐

    linux下文件描述符限制问题

    linux下文件描述符最大限制默认最大为1024,通过 [root@localhost ~]# ulimit -n 1024 这个命令可以查看。此值可以修改。 进程的文件描述符,可以通过 [root@localhost ~]# ls -al /proc/13623/fd |wc -l 59 输出...

    嵌入式开发教程之linux进程与它的文件描述符--千锋培训

    【嵌入式开发教程之Linux进程与它的文件描述符】是一个深入探讨Linux系统中进程管理和文件操作的主题。在这个教程中,我们将重点解析五个关键部分: 一、概述:在Linux操作系统中,每个进程都有一个独立的文件描述...

    用来操作文件描述符的一些特性

    在Linux系统中,`fcntl()`函数就是一个典型的例子,它允许程序员通过不同的`cmd`参数来控制文件描述符的行为,如`F_GETFL`获取文件标志、`F_SETFL`设置文件标志等。 #### 特性示例:网络套接字操作 在上述部分提供...

    并发时-修改Linux系统下的大文件描述符限制

    通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:  $ulimit -n  1024  当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的...

    文件描述符1

    在计算机科学,特别是操作系统领域,文件描述符(File Descriptor)是一个关键的概念,特别是在Linux和类Unix系统中。文件描述符是进程与操作系统交互的一种方式,主要用于读写文件、网络通信等I/O操作。以下是关于...

    android进程间socket传递Ashmem的文件描述符

    Socket不仅可以传输数据,还可以通过`sendmsg()`和`recvmsg()`系统调用传递文件描述符,这得益于Linux的`sendfile()`和`splice()`系统调用的扩展。 具体实现步骤如下: 1. **创建Ashmem**:在进程A中,通过` ...

    linux进程描述符

    此外,它还记录了进程的时间信息(如utime, stime, cutime, cstime),信号处理信息(如pending和blocked信号),文件系统状态(由`fs_struct`表示),打开的文件描述符,以及等待队列等。 进程描述符的`thread_...

    linux 文件I/O编程

    1. **open()**: `open`函数是用于打开一个文件的,它返回一个文件描述符,后续的文件操作都将通过这个描述符进行。该函数接受两个参数:文件名和操作模式(如只读、只写、读写等)。例如,`open("filename", O_...

    基于select的Linux串口485读写,文件描述符 fd_set

    基于linux ,使用select检测串口句柄事件,同时进行超时判断的串口485读写操作。为高效可控的linux串口操作例程。tcsetattr,tcflush,select,ioctl,gettimeofday。485收发方向切换。

    Linux进程间传递文件描术符事例代码

    文件描述符是Linux系统中对打开文件的一种抽象表示,每个进程都有一个文件描述符表,用于管理其打开的文件或套接字等资源。本示例代码将探讨如何在两个进程之间传递文件描述符,以实现数据共享。 首先,我们来看`...

    Linux中通过Socket文件描述符寻找连接状态介绍.docx

    在Linux操作系统中,Socket文件描述符是用于标识进程间通信(IPC)中网络连接状态的一种方式。通过Socket文件描述符,我们可以了解一个进程中的网络连接情况,包括连接的状态、地址等信息。本文将详细介绍如何利用/...

    linux文件IO之整理笔记

    本文总结了 Linux 文件 IO 的相关知识点,涵盖了文件 IO 的基本概念、文件描述符、open 函数、read 函数、write 函数、lseek 函数、close 函数等。 一、文件 IO 概念 文件 IO 是计算机操作系统中最基本的输入/输出...

    USB报告描述符自动生成工具 HID Descriptor tool

    至于“hid descriptor tool”这个文件名,很可能是该工具的执行程序或者源代码文件,用户可以通过运行或编译这个文件来使用HID描述符自动生成的功能。 USB报告描述符是HID设备的关键部分,它定义了设备如何与主机...

    Linux内核中的文件描述符.docx

    在Linux内核中,文件描述符是操作系统用来标识和跟踪进程打开文件的一种机制。它是一个非负整数,用于区分进程中的不同打开文件。当进程通过`open`系统调用打开一个文件时,内核会创建一个`file`结构实例,这个实例...

    通过文件描述符恢复被误删除的文件(前提是文件正被某一个进程占用着,未被释放)

    在Linux系统中,文件描述符是操作系统用于标识和操作打开文件的一种抽象机制。当一个程序打开一个文件时,系统会分配一个唯一的文件描述符给它,通常从0开始(标准输入),1(标准输出),2(标准错误)。在这个场景...

    LINUX进程间传递描述符.pdf

    在Linux下,进程间传递描述符是一种高级的IPC形式,它允许一个进程向另一个进程传递已经打开的文件描述符。这种方式允许进程间共享文件、管道、套接字等资源,而无需复制数据本身。 首先,理解文件描述符是操作系统...

    linux文件操作系统

    4. **文件描述符与流**:理解并使用文件描述符(如`fdopen()`, `close()`)和基于流的文件操作(如`fopen()`, `fclose()`, `fprintf()`, `fscanf()`)。 5. **错误处理**:学习如何正确处理文件操作可能出现的错误,...

    Linux中文件描述符fd与文件指针FILE*互相转换实例解析

    在Linux操作系统中,文件描述符(File Descriptor, fd)和文件指针(FILE *)是两种不同的方式,用于访问和操作文件。它们各自有其特点和应用场景,有时需要在两者之间进行转换。以下是对这两个概念的详细解释以及...

Global site tag (gtag.js) - Google Analytics