资源简介
linux文件读写锁一个例子,已经通过测试,使用非常方便
代码片段和文件信息
/*
* 设置记录锁子函数lock_set.c
*
* 记录锁分为读取锁和写入锁,其中读取锁又称为共享锁,可以使多个
* 进程都能够在文件的同一部分建立读取锁。而写入锁又称为互斥锁,
* 在任何时刻只能有一个进程在文件的某个部分建立写入锁。当然,在
* 文件的同一部分不能同时建立读取锁和写入锁。
*
* fcntl的lock结构如下所示:
* struct flock {
* short l_type;
* off_t l_start;
* short l_whence;
* off_t l_len;
* pid_t l_pid;
* }
*
* 技巧:为加锁整个文件,通常的方法是将l_start说明为0,l_whence
* 说明为SEEK_SET,l_len说明为0。
*/
#include
#include
#include
#include
#include
#include
void print_lock(struct flock lock)
{
printf(“ -----------------------------\n“);
if (lock.l_type == F_RDLCK) {
printf(“\tl_type: F_RDLCK\n“);
}
else if (lock.l_type == F_WRLCK) {
printf(“\tl_type: F_WRLCK\n“);
}
else if (lock.l_type == F_UNLCK) {
printf(“\tl_type: F_UNLCK\n“);
}
printf(“\tl_start: %d\n“ (int)lock.l_start);
if (lock.l_whence == SEEK_SET) {
printf(“\tl_whence: SEEK_SET\n“);
}
else if (lock.l_whence == SEEK_CUR) {
printf(“\tl_whence: SEEK_CUR\n“);
}
else if (lock.l_whence == SEEK_END) {
printf(“\tl_whence: SEEK_END\n“);
}
printf(“\tl_len: %d\n“ (int)lock.l_len);
printf(“ -----------------------------\n“);
}
void lock_set(int fd int type)
{
struct flock lock;
/*赋值lock结构体,加锁整个文件*/
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
while (1) {
lock.l_type = type;
/*
* 根据不同的type来给文件加锁或解锁,
* 如果成功,则返回0,失败则返回1。
* 举例:如果一个文件原来已经建立了互斥锁,那么再调用fcntl
* 建立锁就会失败,返回-1。
*/
if ((fcntl(fd F_SETLK &lock)) == 0) {
/*如果是共享锁*/
if (lock.l_type == F_RDLCK) {
printf(“read only set by %d\n“ getpid());
}
/*如果是互斥锁*/
else if (lock.l_type == F_WRLCK) {
printf(“write lock set by %d\n“ getpid());
- 上一篇:kettle实现字典转换
- 下一篇:yaffs2官方源代码
相关资源
- linux进程监控和守护进程的程序
- rocky凝思操作系统ISO镜像刻录到U盘里
- linux按键测试,获取按键状态
- Linux基本命令操作实验报告
- 学习用4.0版Linux下Zynq的axitimer中断驱动
- ros的urdf机器人模型功能包
- ROS创建工作空间代码我写的博客配套
- 2020大数据面试题总汇
- Linux实验1_常用命令应用.doc
- 树莓派用I2C读取mpu9250代码
- pgilinux-2019-1910-x86-64.txt
- 56706-Linux驱动程序开发第2版源码
- Linux下基于UDP的socket编程,适用多客户
- linux调用kettle所用到的自动化脚本 k
- linux计算器代码
- max9286+96705 4路AHDcamera方案
- 三期视频网上买的,带课件,安装包
- 基于Linux的网络聊天室.rar
- linux 命令.docx
- linux 下QT讯飞语音合成demo
- linux下查看端口是否被占用以及查看所
- socket编程常用API汇总
- arcsde10.2百度云连接linux版本
- 嵌入式uClinux应用程序的NFS开发
- 如何将windows里面的文件导入到Linux虚
- SUSE Linux Enterprise Server 11 SP4 使用
- linux安装abaqus2017破解版
- 最全Linux常用命令大全.docx
- rarlinux-x64-5.5.0.tar.gz
- ADV7441 Linux 驱动源码
评论
共有 条评论