Back to index

courier  0.68.2
locktest.c
Go to the documentation of this file.
00001 /*
00002 ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
00003 ** distribution information.
00004 */
00005 
00006 /* $Id */
00007 
00008 #include      "liblock.h"
00009 #if    USE_FCNTL
00010 #include      "lockfcntl.c"
00011 #endif
00012 #if    USE_FLOCK
00013 #include      "lockflock.c"
00014 #endif
00015 #if    USE_LOCKF
00016 #include      "locklockf.c"
00017 #endif
00018 #include      <signal.h>
00019 #include      <stdlib.h>
00020 
00021 int main()
00022 {
00023 int    fd[2];
00024 pid_t  p;
00025 int    s;
00026 int    f;
00027 
00028        signal(SIGCHLD, SIG_DFL);
00029        if (pipe(fd))
00030        {
00031               perror("pipe");
00032               return (1);
00033        }
00034 
00035        if ((p=fork()) == (pid_t)-1)
00036        {
00037               perror("fork");
00038               return (1);
00039        }
00040 
00041        if (p == 0)
00042        {
00043        char   c;
00044 
00045               close(fd[1]);
00046               read(fd[0], &c, 1);
00047               close(fd[0]);
00048 
00049               if ((f=open("conftest.lock", O_RDWR|O_CREAT, 0644)) < 0)
00050               {
00051                      perror("open");
00052                      exit(1);
00053               }
00054               alarm(5);
00055 
00056               if (ll_lockfd(f, ll_writelock, 0, 0))
00057               {
00058                      close(f);
00059                      exit(0);
00060               }
00061               close(f);
00062               exit(1);
00063        }
00064        
00065        if ((f=open("conftest.lock", O_RDWR|O_CREAT, 0644)) < 0)
00066        {
00067               perror("open");
00068               exit(1);
00069        }
00070 
00071        if (ll_lockfd(f, ll_writelock, 0, 0))
00072        {
00073               perror("lock");
00074               close(f);
00075               exit(1);
00076        }
00077        close(fd[1]);
00078        close(fd[0]);
00079        while (wait(&s) != p)
00080               ;
00081        if (s == 0)
00082               exit(0);
00083        exit(1);
00084 }