代码之家  ›  专栏  ›  技术社区  ›  vy32

linux:os.pipe()中的文件描述符未出现在/dev/fd中

  •  3
  • vy32  · 技术社区  · 7 年前

    在过去,我看到所有打开的文件描述符的虚拟文件都出现在 /dev/fd . 但是,目前我使用的是AmazonLinux,在运行时没有看到新的文件描述符出现。 os.pipe() 在python程序中。

    例如:

    MASTER:hadoop@imrdasem2d14$ ls -l /dev/fd/
    total 0
    lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 0 -> /dev/pts/0
    lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 1 -> /dev/pts/0
    lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 2 -> /dev/pts/0
    lr-x------ 1 hadoop hadoop 64 Jul 23 15:39 3 -> /proc/30933/fd
    MASTER:hadoop@imrdasem2d14$ %
    python
    >>> import os
    >>> a,b = os.pipe()
    >>> c,d = os.pipe()
    >>>
    [2]+  Stopped                 python
    MASTER:hadoop@imrdasem2d14$ !ls
    ls -l /dev/fd/
    total 0
    lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 0 -> /dev/pts/0
    lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 1 -> /dev/pts/0
    lrwx------ 1 hadoop hadoop 64 Jul 23 15:39 2 -> /dev/pts/0
    lr-x------ 1 hadoop hadoop 64 Jul 23 15:39 3 -> /proc/31001/fd
    MASTER:hadoop@imrdasem2d14$ 
    

    但很明显管道在工作:

    a,b,c,d
    (3, 4, 5, 6)
    >>> os.write(b,b"foo")
    3
    >>> os.read(a,3)
    b'foo'
    

    那么,为什么我的3、4、5和6的文件描述符不在/dev/fd中呢?

    1 回复  |  直到 7 年前
        1
  •  3
  •   vy32    7 年前

    的内容 /dev/fd 是特定于过程的。你在看 ls 进程的文件描述符,而不是python进程的文件描述符。

    让您的python进程检查内容:

    os.listdir('/dev/fd')
    

    例如:

    >>> import os
    >>> os.listdir('/dev/fd/')
    ['0', '1', '2', '3']
    >>> a,b = os.pipe()
    >>> os.listdir('/dev/fd/')
    ['0', '1', '2', '3', '4', '5']
    >>>