add file trylock functions
parent
bd9a588840
commit
8b563ce830
3
HISTORY
3
HISTORY
|
|
@ -1,7 +1,8 @@
|
||||||
|
|
||||||
Version 1.31 2016-11-11
|
Version 1.31 2016-11-13
|
||||||
* move SET_SOCKOPT_NOSIGPIPE from sockopt.c to sockopt.h
|
* move SET_SOCKOPT_NOSIGPIPE from sockopt.c to sockopt.h
|
||||||
* add function get_time_item_from_str
|
* add function get_time_item_from_str
|
||||||
|
* add file trylock functions
|
||||||
|
|
||||||
Version 1.30 2016-10-31
|
Version 1.30 2016-10-31
|
||||||
* modify php-fastcommon/test.php
|
* modify php-fastcommon/test.php
|
||||||
|
|
|
||||||
|
|
@ -2319,17 +2319,17 @@ bool is_power2(const int64_t n)
|
||||||
return i == n;
|
return i == n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int do_lock_file(int fd, int cmd)
|
static inline int do_lock_file(int fd, int cmd, int type)
|
||||||
{
|
{
|
||||||
struct flock lock;
|
struct flock lock;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
memset(&lock, 0, sizeof(lock));
|
memset(&lock, 0, sizeof(lock));
|
||||||
lock.l_type = cmd;
|
lock.l_type = type;
|
||||||
lock.l_whence = SEEK_SET;
|
lock.l_whence = SEEK_SET;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ((result=fcntl(fd, F_SETLKW, &lock)) != 0)
|
if ((result=fcntl(fd, cmd, &lock)) != 0)
|
||||||
{
|
{
|
||||||
result = errno != 0 ? errno : ENOMEM;
|
result = errno != 0 ? errno : ENOMEM;
|
||||||
fprintf(stderr, "call fcntl fail, "
|
fprintf(stderr, "call fcntl fail, "
|
||||||
|
|
@ -2343,16 +2343,31 @@ static inline int do_lock_file(int fd, int cmd)
|
||||||
|
|
||||||
int file_read_lock(int fd)
|
int file_read_lock(int fd)
|
||||||
{
|
{
|
||||||
return do_lock_file(fd, F_RDLCK);
|
return do_lock_file(fd, F_SETLKW, F_RDLCK);
|
||||||
}
|
}
|
||||||
|
|
||||||
int file_write_lock(int fd)
|
int file_write_lock(int fd)
|
||||||
{
|
{
|
||||||
return do_lock_file(fd, F_WRLCK);
|
return do_lock_file(fd, F_SETLKW, F_WRLCK);
|
||||||
}
|
}
|
||||||
|
|
||||||
int file_unlock(int fd)
|
int file_unlock(int fd)
|
||||||
{
|
{
|
||||||
return do_lock_file(fd, F_UNLCK);
|
return do_lock_file(fd, F_SETLKW, F_UNLCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
int file_try_read_lock(int fd)
|
||||||
|
{
|
||||||
|
return do_lock_file(fd, F_SETLK, F_RDLCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
int file_try_write_lock(int fd)
|
||||||
|
{
|
||||||
|
return do_lock_file(fd, F_SETLK, F_WRLCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
int file_try_unlock(int fd)
|
||||||
|
{
|
||||||
|
return do_lock_file(fd, F_SETLK, F_UNLCK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -587,6 +587,27 @@ int file_write_lock(int fd);
|
||||||
*/
|
*/
|
||||||
int file_unlock(int fd);
|
int file_unlock(int fd);
|
||||||
|
|
||||||
|
/** try file read lock
|
||||||
|
* parameters:
|
||||||
|
* fd: the file descriptor to lock
|
||||||
|
* return: error no, 0 for success, != 0 fail
|
||||||
|
*/
|
||||||
|
int file_try_read_lock(int fd);
|
||||||
|
|
||||||
|
/** try file write lock
|
||||||
|
* parameters:
|
||||||
|
* fd: the file descriptor to lock
|
||||||
|
* return: error no, 0 for success, != 0 fail
|
||||||
|
*/
|
||||||
|
int file_try_write_lock(int fd);
|
||||||
|
|
||||||
|
/** try file unlock
|
||||||
|
* parameters:
|
||||||
|
* fd: the file descriptor to unlock
|
||||||
|
* return: error no, 0 for success, != 0 fail
|
||||||
|
*/
|
||||||
|
int file_try_unlock(int fd);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue