linux 文件锁获取读锁,linux文件读写 文件锁、select、poll【转】

本文转载自:http://blog.csdn.net/fansongy/article/details/6853395

一、文件锁

文件锁用于多个用户共同使用或操作同一个文件。有读锁的时候可以再加读锁,不能再加写锁。有写锁的时候,不能加任何锁,加读锁时,该描述符必须是读打开,加写锁时,该描述符必须是写打开,且只在进程间有用。

重写的上锁方法

[cpp] view plain copy print?

//lock.c

int lock_set(int fd,int type){

struct flock lock;

lock.l_type=type;

lock.l_start=0;

lock.l_whence=SEEK_SET;

lock.l_len = 0;

lock.l_pid=-1;

fcntl(fd,F_GETLK,&lock);

if(lock.l_type!=F_UNLCK){

if(lock.l_type == F_RDLCK)

printf("Read lock already set by %d!\n",lock.l_pid);

else if(lock.l_type == F_WRLCK)

printf("Write lock already set by %d!\n",lock.l_pid);

}

lock.l_type = type;

//此处的F_SETLKW为F_SETLK的阻塞版本,当无法获取锁时进入睡眠等待状态

if(fcntl(fd,F_SETLKW,&lock)

#include

#include

#include"lock.c"

int main(){

int fd;

fd=open("readme",O_RDWR|O_CREAT,0666);

if(fd

#include

#include

#include"lock.c"

int main(){

int fd;

fd=open("readme",O_RDWR|O_CREAT,0666);

if(fd

#include

#include

#include

#define MAX(a,b) (a>b?a:b)

int main(){

int fd[3];

char buff[1024];

int res,max_fd,i,num;

fd_set insert,temp_insert;

struct timeval tv;

fd[0]=0;

if((fd[1]=open("in1",O_RDONLY|O_NONBLOCK))

#include

#include

#include

#include

#include

#include

#define MAX_BUFFER_SIZE 1024

#define IO_IN_FILES 3

#define TIME_DELAY 60000

int main() {

struct pollfd fds[IO_IN_FILES];

char buff[MAX_BUFFER_SIZE];

int i,res,real_read;

fds[0].fd=0;

if((fds[1].fd=open("in1",O_RDONLY|O_NONBLOCK))

Linux 文件读写操作与磁盘挂载

文件读写 [文件描述符] Linux下,通常通过open打开一个文件,它然后返回给我们一个整数,通过这个整数便可以操作文件,这个整数我们称文件描述符(fd).对应被打开的文件,它也是一种系统资源,那么 ...

Linux IO模式以及select poll epoll详解

一 背景 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network ...

(转)linux文件读写的流程

转自http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0 在这篇文章中,我们看到文件是如何被打开 ...

Linux文件读写机制及优化方式

导读 Linux是一个可控性强的,安全高效的操作系统.本文只讨论Linux下文件的读写机制,不涉及不同读取方式如read,fread,cin等的对比,这些读取方式本质上都是调用系统api read,只 ...

文档-linux io模式及select,poll,epoll

文档-Linux IO模式详解 1. 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 1.1 用户空间与内核空间 现在操作 ...

Linux文件读写笔记

读文件: #include #include #include //linux下面的头文件 #inc ...

【原创】Linux select/poll机制原理分析

前言 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 1. 概述 Linux系统 ...

(转载) Linux IO模式及 select、poll、epoll详解

注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案 ...

Linux高级编程--05.文件读写

缓冲I/O和非缓冲I/O 文件读写主要牵涉到了如下五个操作:打开.关闭.读.写.定位.在Linux系统中,提供了两套API, 一套是C标准API:fopen.fclose.fread.fwrite.f ...

随机推荐

分享25个CSS前端网页设计常用技巧

1.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值.2.同一个的class选择符可以在一个文档中重复出现,而id选择符却只能出现一次;对一个标签同时使用class ...

使用HTML5的JS选择器操作页面中的元素

文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 html> 2 

React Jest测试

一. var jest = require('jest'); jest.dontMock('../CheckboxWithLabel.js'); describe('CheckboxWithLabel ...

php中对象的串行化

我们大家有知道PHP串行化可以把变量包括对象,转化成连续bytes数据,你可以将串行化后的变量存在一个文件里或在网络上传输,然后再反串行化还原为原来的数据.文章这里就PHP串行化为大家详细的介绍.你在 ...

Bug记录:微博的Java SDK返回经纬度错误

现象:美国的坐标点可能会定位到西藏地区-后发现原来负经度经解析后,均变成正的! 源码: private void getGeoInfo(String geo) { StringBuffer value ...

js中的 arguments ,实参的集合

当 传递的参数个数不确定时,,可使用 arguments ..

cmake命令收集

cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录 PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/bui ...

算法-java代码实现归并排序

归并排序 对于一个int数组,请编写一个归并排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值