⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lock1.c

📁 本文件介绍了unix内核的c源代码
💻 C
字号:
#include <stdio.h>#include <fcntl.h>/* 查看文件从start开始len字节内的锁情况 */void SeeLock(int fd, int start, int len){	struct flock arg;	arg.l_type=F_WRLCK;	arg.l_whence = SEEK_SET;	arg.l_start = start;	arg.l_len = len;	if (fcntl(fd, F_GETLK, &arg) == -1) fprintf(stderr, "See Lock failed.\n");	else if (arg.l_type == F_UNLCK) fprintf(stderr, "No Lock From %d To %d\n", start, len);	else if (arg.l_type == F_WRLCK) fprintf(stderr, "Write Lock From %d To %d, id=%d\n", start, len, arg.l_pid);	else if (arg.l_type == F_RDLCK) fprintf(stderr, "Read Lock From %d To %d, id=%d\n", start, len, arg.l_pid);}/* 在文件从start开始len字节内的申请读锁,阻塞模式 */void GetReadLock(int fd, int start, int len){	struct flock arg;	arg.l_type=F_RDLCK;	arg.l_whence = SEEK_SET;	arg.l_start = start;	arg.l_len = len;	if (fcntl(fd, F_SETLKW, &arg) == -1) fprintf(stderr, "[%d] Set Read Lock failed.\n", getpid());	else fprintf(stderr, "[%d] Set Read Lock From %d To %d\n", getpid(), start, len);}/* 在文件从start开始len字节内的申请写锁,阻塞模式 */void GetWriteLock(int fd, int start, int len){	struct flock arg;	arg.l_type=F_WRLCK;	arg.l_whence = SEEK_SET;	arg.l_start = start;	arg.l_len = len;	if (fcntl(fd, F_SETLKW, &arg) == -1) fprintf(stderr, "[%d] Set Write Lock failed.\n", getpid());	else fprintf(stderr, "[%d] Set Write Lock From %d To %d\n", getpid(), start, len);}/* 释放文件从start开始len字节内的锁 */void ReleaseLock(int fd, int start, int len){	struct flock arg;	arg.l_type=F_UNLCK;	arg.l_whence = SEEK_SET;	arg.l_start = start;	arg.l_len = len;	if (fcntl(fd, F_SETLKW, &arg) == -1) fprintf(stderr, "[%d] UnLock failed.\n", getpid());	else fprintf(stderr, "[%d] UnLock From %d To %d\n", getpid(), start, len);}void main(){	int fd;	struct flock arg;	if ((fd = open("/tmp/tlock1", O_RDWR| O_CREAT, 0755)) <0)	{		fprintf(stderr, "open file failed.\n");		return;	}	SeeLock(fd, 0, 10);			GetReadLock(fd, 0, 10);		/* 申请读锁 */	SeeLock(fd, 11, 20);			GetWriteLock(fd, 11, 20);	/* 申请写锁 */	sleep(30);			ReleaseLock(fd, 0, 10);		/* 释放锁 */	ReleaseLock(fd, 11, 20);	/* 释放锁 */}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -