最新帖子 精华区 社区服务 会员列表 统计排行 银行
主题 : 利用mktemp和fcntl实现进程间互斥操作
楼主  发表于: 2007-09-05 10:07

利用mktemp和fcntl实现进程间互斥操作

struct flock lock_it, unlock_it;
int lock_fd = -1;
void my_lock_init(char *pathname)
{
        char lock_file[64];
        strncpy(lock_file, pathname, sizeof(lock_file));
        lock_file[sizeof(lock_file) - 1] = '\0';
        if (mktemp(lock_file) == NULL) {
                perror("mktemp");
                exit(-1);     
        }
        if ((lock_fd = open(lock_file, O_CREAT | O_WRONLY, 0600)) < 0) {
                perror("open lock file");
                exit(-1);
        }
        unlink(lock_file); /* unlink 不影响文件打开状态,也省却了某些
                            * 好事者看见锁文件就妄图删除之为快 */
        lock_it.l_type = F_WRLCK;
        lock_it.l_whence = SEEK_SET;
        lock_it.l_start = 0;
        lock_it.l_len = 0;
        unlock_it.l_type = F_UNLCK;
        unlock_it.l_whence = SEEK_SET;
        unlock_it.l_start = 0;
        unlock_it.l_len = 0;
}
void my_lock( )
{
        while (fcntl(lock_fd, F_SETLKW, &lock_it) < 0) {
                if (errno == EINTR)
                        continue;
                else {
                        perror("fcntl lock");
                        exit(-1);
                }
        }
}
void my_unlock( )
{
        if (fcntl(lock_fd, F_SETLKW, &unlock_it) < 0) {
                perror("fcntl lock");
                exit(-1);
        }
}

From:北京市 顶端
快速回复 顶端
内容
HTML 代码不可用
使用签名
Wind Code自动转换

按 Ctrl+Enter 直接提交