dwww Home | Manual pages | Find package

proc_pid_fd(5)                File Formats Manual                proc_pid_fd(5)

NAME
       /proc/pid/fd/ - file descriptors

DESCRIPTION
       /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 infor-
              mation 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), ino-
              tify_init(2), perf_event_open(2), signalfd(2), timerfd_create(2),
              and userfaultfd(2)), the entry will be a symbolic link with  con-
              tents 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  (typi-
              cally 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 argu-
              ment, but don't send their output to standard output if no  argu-
              ment  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  symboli-
              cally 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 en-
              try, 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 de-
              scriptor 0.

SEE ALSO
       proc(5)

Linux man-pages 6.9.1              2024-05-02                    proc_pid_fd(5)

Generated by dwww version 1.16 on Tue Dec 16 07:36:33 CET 2025.