FCNTL.2
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:7k
源码类别:

操作系统开发

开发平台:

C/C++

  1. FCNTL(2)                  Minix Programmer's Manual                   FCNTL(2)
  2. NAME
  3.      fcntl - miscellaneous file descriptor control functions
  4. SYNOPSIS
  5.      #include <fcntl.h>
  6.      int fcntl(int fd, int *cmd, [data])
  7. DESCRIPTION
  8.      Fcntl()  performs  several  file  descriptor  related   functions,   like
  9.      duplicating  a  file  descriptor,  setting the "close on exec" attribute,
  10.      etc.  The fd argument is the file descriptor to operate on,  cmd  is  the
  11.      command  code  of  the  operation  to  perform,  and  data is an optional
  12.      argument to give or receive parameters.   The  command  codes  and  other
  13.      symbols and types are declared in <fcntl.h>.  The commands are:
  14.      fcntl(fd, F_DUPFD, int fd2)
  15.           Returns a new file descriptor that is a duplicate of file descriptor
  16.           fd.  It shares the same file pointer and the same file status flags,
  17.           but has separate file descriptor flags that are initially off.   The
  18.           value  of  the  duplicate  file  descriptor  is  the first free file
  19.           descriptor greater than or equal to fd2.
  20.      fcntl(fd, F_GETFD)
  21.           Returns the file descriptor flags associated  with  file  descriptor
  22.           fd.   The  flags  are the "close on exec" flag FD_CLOEXEC that, when
  23.           set, causes the file  descriptor  to  be  closed  when  the  process
  24.           executes  another  program.  The Minix-vmd specific FD_ASYNCHIO flag
  25.           marks a file descriptor for asynchronous I/O operation.
  26.      fcntl(fd, F_SETFD, int flags)
  27.           Set the file descriptor flags of fd to flags.
  28.      fcntl(fd, F_GETFL)
  29.           Return the file status flags and file access modes  associated  with
  30.           the  file associated with file descriptor fd.  The file status flags
  31.           are O_NONBLOCK (non blocking I/O) and O_APPEND (append  mode).   The
  32.           file  access  modes  are O_RDONLY (read-only), O_WRONLY (write-only)
  33.           and O_RDWR (read-write).  These flags are also used  in  the  second
  34.           argument of open(2).
  35.      fcntl(fd, F_SETFL, int flags)
  36.           Set the file status flags of the file referenced  by  fd  to  flags.
  37.           Only  O_NONBLOCK and O_APPEND may be changed.  Access mode flags are
  38.           ignored.
  39.      The next four commands use a parameter  of  type  struct  flock  that  is
  40.      defined in <fcntl.h> as:
  41.           struct flock {
  42.                                                                              1
  43. FCNTL(2)                  Minix Programmer's Manual                   FCNTL(2)
  44.               short   l_type;     /* F_RDLCK, F_WRLCK, or F_UNLCK */
  45.               short   l_whence;   /* SEEK_SET, SEEK_CUR, or SEEK_END */
  46.               off_t   l_start;    /* byte offset to start of segment */
  47.               off_t   l_len;      /* length of segment */
  48.               pid_t   l_pid;      /* process id of the locks' owner */
  49.           };
  50.      This structure describes a  segment  of  a  file.   L_type  is  the  lock
  51.      operation  performed  on  the  file segment:  F_RDLCK to set a read lock,
  52.      F_WRLCK to set a write lock, and  F_UNLCK  to  remove  a  lock.   Several
  53.      processes  may  have  a  read lock on a segment, but only one process can
  54.      have a write  lock.   L_whence  tells  if  the  l_start  offset  must  be
  55.      interpreted  from  the  start  of  the  file (SEEK_SET), the current file
  56.      position (SEEK_CUR),  or  the  end  of  the  file  (SEEK_END).   This  is
  57.      analogous  to  the third parameter of lseek(2).  These SEEK_* symbols are
  58.      declared in <unistd.h>.  L_start is the starting offset of the segment of
  59.      the  file.  L_end is the length of the segment.  If zero then the segment
  60.      extends until end of file.   L_pid  is  the  process-id  of  the  process
  61.      currently holding a lock on the segment.  It is returned by F_GETLK.
  62.      fcntl(fd, F_GETLK, struct flock *lkp)
  63.           Find out if some other process has a lock on a segment of  the  file
  64.           associated  by  file  descriptor  fd  that overlaps with the segment
  65.           described by the flock structure pointed to by lkp.  If the  segment
  66.           is  not  locked  then  l_type is set to F_UNLCK.  Otherwise an flock
  67.           structure is returned through lkp that describes the  lock  held  by
  68.           the  other  process.   L_start  is  set relative to the start of the
  69.           file.
  70.      fcntl(fd, F_SETLK, struct flock *lkp)
  71.           Register a lock on a  segment  of  the  file  associated  with  file
  72.           descriptor  fd.   The  file segment is described by the struct flock
  73.           pointed to by lkp.  This call returns an error if any  part  of  the
  74.           segment is already locked.
  75.      fcntl(fd, F_SETLKW, struct flock *lkp)
  76.           Register a lock on a  segment  of  the  file  associated  with  file
  77.           descriptor  fd.   The  file segment is described by the struct flock
  78.           pointed to by lkp.  This call blocks waiting  for  the  lock  to  be
  79.           released if any part of the segment is already locked.
  80.      fcntl(fd, F_FREESP, struct flock *lkp)
  81.           Free a segment of disk space occupied by the  file  associated  with
  82.           file  descriptor  fd.   The segment is described by the struct flock
  83.           pointed to by lkp.  The file is truncated  in  length  to  the  byte
  84.           position indicated by l_start if l_len is zero.  If l_len is nonzero
  85.           then the file keeps its size, but the freed bytes now read as zeros.
  86.           (Other than sharing the flock structure, this call has nothing to do
  87.           with locking.)
  88.                                                                              2
  89. FCNTL(2)                  Minix Programmer's Manual                   FCNTL(2)
  90.      fcntl(fd, F_SEEK, u64_t pos)
  91.           This Minix-vmd specific call sets the  file  position  of  the  file
  92.           associated  with  file descriptor fd to the byte offset indicated by
  93.           the 64-bit number pos.  This is analogous to the call
  94.                lseek(fd, pos, SEEK_SET)
  95.           except that F_SEEK can be used on devices larger than 4 gigabyte.
  96. SEE ALSO
  97.      open(2), dup(2), lseek(2), ftruncate(3), int64(3).
  98. DIAGNOSTICS
  99.      Fcntl returns a file descriptor, flags, or 0  to  indicate  success.   On
  100.      error  -1 is returned, with errno set to the appropriate error code.  The
  101.      most notable errors are:
  102.      EINTR
  103.           If a blocked F_SETLKW operation is interrupted by a signal  that  is
  104.           caught.
  105.      EAGAIN
  106.           By F_SETLK if a segment cannot be locked.
  107.      EBADF
  108.           A bad file descriptor in general, or an attempt  to  place  a  write
  109.           lock on a file that is not open for writing, etc.
  110.      ENOLCK
  111.           No locks available, the file system code has  run  out  of  internal
  112.           table space.
  113. AUTHOR
  114.      Kees J. Bot (kjb@cs.vu.nl)
  115.                                                                              3