| NAME | DESCRIPTION | SEE ALSO | COLOPHON | |
|  | 
proc_pid_fd(5)             File Formats Manual             proc_pid_fd(5)
       /proc/pid/fd/ - file descriptors
       /proc/pid/fd/
              This is a subdirectory containing one entry for each file
              which the process has open, named by its file descriptor,
              and which is a symbolic link to the actual file.  Thus, 0
              is standard input, 1 standard output, 2 standard error, and
              so on.
              For file descriptors for pipes and sockets, the entries
              will be symbolic links whose content is the file type with
              the inode.  A readlink(2) call on this file returns a
              string in the format:
                  type:[inode]
              For example, socket:[2248868] will be a socket and its
              inode is 2248868.  For sockets, that inode can be used to
              find more information in one of the files under /proc/net/.
              For file descriptors that have no corresponding inode
              (e.g., file descriptors produced by bpf(2),
              epoll_create(2), eventfd(2), inotify_init(2),
              perf_event_open(2), signalfd(2), timerfd_create(2), and
              userfaultfd(2)), the entry will be a symbolic link with
              contents of the form
                  anon_inode:file-type
              In many cases (but not all), the file-type is surrounded by
              square brackets.
              For example, an epoll file descriptor will have a symbolic
              link whose content is the string anon_inode:[eventpoll].
              In a multithreaded process, the contents of this directory
              are not available if the main thread has already terminated
              (typically by calling pthread_exit(3)).
              Programs that take a filename as a command-line argument,
              but don't take input from standard input if no argument is
              supplied, and programs that write to a file named as a
              command-line argument, but don't send their output to
              standard output if no argument is supplied, can
              nevertheless be made to use standard input or standard
              output by using /proc/pid/fd files as command-line
              arguments.  For example, assuming that -i is the flag
              designating an input file and -o is the flag designating an
              output file:
                  $ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
              and you have a working filter.
              /proc/self/fd/N is approximately the same as /dev/fd/N in
              some UNIX and UNIX-like systems.  Most Linux MAKEDEV
              scripts symbolically link /dev/fd to /proc/self/fd, in
              fact.
              Most systems provide symbolic links /dev/stdin,
              /dev/stdout, and /dev/stderr, which respectively link to
              the files 0, 1, and 2 in /proc/self/fd.  Thus the example
              command above could be written as:
                  $ foobar -i /dev/stdin -o /dev/stdout ...
              Permission to dereference or read (readlink(2)) the
              symbolic links in this directory is governed by a ptrace
              access mode PTRACE_MODE_READ_FSCREDS check; see ptrace(2).
              Note that for file descriptors referring to inodes (pipes
              and sockets, see above), those inodes still have permission
              bits and ownership information distinct from those of the
              /proc/pid/fd entry, and that the owner may differ from the
              user and group IDs of the process.  An unprivileged process
              may lack permissions to open them, as in this example:
                  $ echo test | sudo -u nobody cat
                  test
                  $ echo test | sudo -u nobody cat /proc/self/fd/0
                  cat: /proc/self/fd/0: Permission denied
              File descriptor 0 refers to the pipe created by the shell
              and owned by that shell's user, which is not nobody, so cat
              does not have permission to create a new file descriptor to
              read from that inode, even though it can still read from
              its existing file descriptor 0.
       proc(5)
       This page is part of the man-pages (Linux kernel and C library
       user-space interface documentation) project.  Information about
       the project can be found at 
       ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report
       for this manual page, see
       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.
       This page was obtained from the tarball man-pages-6.15.tar.gz
       fetched from
       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on
       2025-08-11.  If you discover any rendering problems in this HTML
       version of the page, or you believe there is a better or more up-
       to-date source for the page, or you have corrections or
       improvements to the information in this COLOPHON (which is not
       part of the original manual page), send a mail to
       man-pages@man7.org
Linux man-pages 6.15            2025-05-17                 proc_pid_fd(5)