mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
2000-03-09
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5728ed4f51
commit
976692f8ae
8 changed files with 136 additions and 77 deletions
|
|
@ -78,6 +78,54 @@ flock(fd, operation)
|
|||
}
|
||||
return i;
|
||||
}
|
||||
#elif defined HAVE_FCNTL && defined HAVE_FCNTL_H
|
||||
|
||||
/* These are the flock() constants. Since this sytems doesn't have
|
||||
flock(), the values of the constants are probably not available.
|
||||
*/
|
||||
# ifndef LOCK_SH
|
||||
# define LOCK_SH 1
|
||||
# endif
|
||||
# ifndef LOCK_EX
|
||||
# define LOCK_EX 2
|
||||
# endif
|
||||
# ifndef LOCK_NB
|
||||
# define LOCK_NB 4
|
||||
# endif
|
||||
# ifndef LOCK_UN
|
||||
# define LOCK_UN 8
|
||||
# endif
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
int
|
||||
flock(fd, operation)
|
||||
int fd;
|
||||
int operation;
|
||||
{
|
||||
struct flock lock;
|
||||
|
||||
switch (operation & ~LOCK_NB) {
|
||||
case LOCK_SH:
|
||||
lock.l_type = F_RDLCK;
|
||||
break;
|
||||
case LOCK_EX:
|
||||
lock.l_type = F_WRLCK;
|
||||
break;
|
||||
case LOCK_UN:
|
||||
lock.l_type = F_UNLCK;
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
lock.l_whence = SEEK_SET;
|
||||
lock.l_start = lock.l_len = 0L;
|
||||
|
||||
return fcntl(fd, (operation & LOCK_NB) ? F_SETLK : F_SETLKW, &lock);
|
||||
}
|
||||
#else
|
||||
int
|
||||
flock(fd, operation)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue