• Ulrich Drepper's avatar
    F_DUPFD_CLOEXEC implementation · 22d2b35b
    Ulrich Drepper authored
    One more small change to extend the availability of creation of file
    descriptors with FD_CLOEXEC set.  Adding a new command to fcntl() requires
    no new system call and the overall impact on code size if minimal.
    
    If this patch gets accepted we will also add this change to the next
    revision of the POSIX spec.
    
    To test the patch, use the following little program.  Adjust the value of
    F_DUPFD_CLOEXEC appropriately.
    
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #include <errno.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #ifndef F_DUPFD_CLOEXEC
    # define F_DUPFD_CLOEXEC 12
    #endif
    
    int
    main (int argc, char *argv[])
    {
      if  (argc > 1)
        {
          if (fcntl (3, F_GETFD) == 0)
    	{
    	  puts ("descriptor not closed");
    	  exit (1);
    	}
          if (errno != EBADF)
    	{
    	  puts ("error not EBADF");
    	  exit (1);
    	}
    
          exit (0);
        }
      int fd = fcntl (STDOUT_FILENO, F_DUPFD_CLOEXEC, 0);
      if (fd == -1 && errno == EINVAL)
        {
          puts ("F_DUPFD_CLOEXEC not supported");
          return 0;
        }
      if (fd != 3)
        {
          puts ("program called with descriptors other than 0,1,2");
          return 1;
        }
    
      execl ("/proc/self/exe", "/proc/self/exe", "1", NULL);
      puts ("execl failed");
      return 1;
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Signed-off-by: 's avatarUlrich Drepper <drepper@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: <linux-arch@vger.kernel.org>
    Cc: Kyle McMartin <kyle@mcmartin.ca>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: 's avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
    22d2b35b
Name
Last commit
Last update
Documentation Loading commit data...
arch Loading commit data...
block Loading commit data...
crypto Loading commit data...
drivers Loading commit data...
fs Loading commit data...
include Loading commit data...
init Loading commit data...
ipc Loading commit data...
kernel Loading commit data...
lib Loading commit data...
mm Loading commit data...
net Loading commit data...
scripts Loading commit data...
security Loading commit data...
sound Loading commit data...
usr Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Kbuild Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...
REPORTING-BUGS Loading commit data...