root/ompi/mca/io/romio321/romio/util/nfslock.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
   2 /*  
   3  *  (C) 2004 by Argonne National Laboratory.
   4  *      See COPYRIGHT in top-level directory.
   5  */
   6 #include <stdio.h>
   7 #include <fcntl.h>
   8 #include <errno.h>
   9 #include <unistd.h>
  10 
  11 /*
  12  * This program tests to see if fcntl returns success when asked to 
  13  * establish a file lock.  This test is intended for use on file systems
  14  * such as NFS that may not implement file locks.  ROMIO makes use
  15  * of file locks to implement certain operations, and may not work
  16  * properly if file locks are not available.  
  17  *
  18  * This is a simple test and has at least two limitations:
  19  * 
  20  * 1. Some implementations of NFS are known to return success for 
  21  * setting a file lock when in fact no lock has been set.  This
  22  * test will not detect such erroneous implementations of NFS
  23  *
  24  * 2. Some implementations will hang (enter and wait indefinitately)
  25  * within the fcntl call.  This program will also hang in that case.
  26  * Under normal conditions, this program should only take a few seconds to 
  27  * run.
  28  *
  29  * The program prints a message showing the success or failure of
  30  * setting the file lock and sets the return status to 0 on success and
  31  * non-zero on failure.  If there is a failure, the system routine
  32  * perror is also called to explain the reason.
  33  */
  34 
  35 /* style: allow:printf:2 sig:0 */
  36 
  37 int main( int argc, char *argv[] )
  38 {
  39     struct flock lock;
  40     int fd, err;
  41     char *filename;
  42 
  43     /* Set the filename.  Either arg[1] or conftest.dat */
  44     if (argc > 1 && argv[1]) {
  45       filename = argv[1];
  46     }
  47     else {
  48       filename = "conftest.dat";
  49     }
  50 
  51        
  52     lock.l_type   = F_WRLCK;
  53     lock.l_start  = 0;
  54     lock.l_whence = SEEK_SET;
  55     lock.l_len    = 100;
  56 
  57     fd = open(filename, O_RDWR | O_CREAT, 0644);
  58 
  59     err = fcntl(fd, F_SETLKW, &lock);
  60 
  61     if (err) {
  62       printf( "Failed to set a file lock on %s\n", filename );
  63       perror( "Reason " );
  64     }
  65     else {
  66       printf( "fcntl claims success in setting a file lock on %s\n", filename );
  67     }
  68    /* printf("err = %d, errno = %d\n", err, errno); */
  69     close(fd);
  70     unlink( filename );
  71     return err;
  72 }

/* [<][>][^][v][top][bottom][index][help] */