(linenum→info "unix/slp.c:2238")

coreutils/6.9/lib/dup2.c

    1: /* Duplicate an open file descriptor to a specified file descriptor.
    2: 
    3:    Copyright (C) 1999, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
    4: 
    5:    This program is free software; you can redistribute it and/or modify
    6:    it under the terms of the GNU General Public License as published by
    7:    the Free Software Foundation; either version 2, or (at your option)
    8:    any later version.
    9: 
   10:    This program is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13:    GNU General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU General Public License
   16:    along with this program; if not, write to the Free Software Foundation,
   17:    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
   18: 
   19: /* written by Paul Eggert */
   20: 
   21: #include <config.h>
   22: 
   23: /* Specification.  */
   24: #include <unistd.h>
   25: 
   26: #include <errno.h>
   27: #include <fcntl.h>
   28: 
   29: #ifndef F_DUPFD
   30: static int
   31: dupfd (int fd, int desired_fd)
   32: {
   33:   int duplicated_fd = dup (fd);
   34:   if (duplicated_fd < 0 || duplicated_fd == desired_fd)
   35:     return duplicated_fd;
   36:   else
   37:     {
   38:       int r = dupfd (fd, desired_fd);
   39:       int e = errno;
   40:       close (duplicated_fd);
   41:       errno = e;
   42:       return r;
   43:     }
   44: }
   45: #endif
   46: 
   47: int
   48: dup2 (int fd, int desired_fd)
   49: {
   50:   if (fd == desired_fd)
   51:     return fd;
   52:   close (desired_fd);
   53: #ifdef F_DUPFD
   54:   return fcntl (fd, F_DUPFD, desired_fd);
   55: #else
   56:   return dupfd (fd, desired_fd);
   57: #endif
   58: }
Syntax (Markdown)