本文转载自: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文件读写 文件锁、select、poll【转】的更多相关文章

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

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

  2. Linux IO模式以及select poll epoll详解

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

  3. (转)linux文件读写的流程

    转自http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0 在<linux内核虚拟文件系统浅析>这篇文章中,我们看到文件是如何被打开 ...

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

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

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

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

  6. Linux文件读写笔记

    读文件: #include <stdio.h> #include <stdlib.h> #include <unistd.h> //linux下面的头文件 #inc ...

  7. LINUX - 文件读写缓存

    遇到一个进程core掉后日志打印不出来的问题: 参考如下: [引用] 只有正常退出,才能做到flush.否则将写失败. 之后有百度了下中文资料,发现同样的结论. "fflush库函数的作用是 ...

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

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

  9. 1 select,poll和epoll

    其实所有的I/O都是轮询的方法,只不过实现的层面不同罢了. 基本上select有3个缺点: 连接数受限 查找配对速度慢 数据由内核拷贝到用户态 poll改善了第一个缺点 epoll改了三个缺点. se ...

随机推荐

  1. DEV Express中NavBarCointrol的使用

    尚未对内容进行删减,内容有偏差和冗余,谨慎阅读. 发现在后面,写在前面: 13,之前在Default模式下,之所以很多Appearance属性都起不到作用,是因为Control的LookAndFeel ...

  2. 微信小程序显示cms里的html文章

    首先在cms模版中将html文章转化为json数据,识别图片,文本和换行,过滤掉样式和标签.这里是用PHP的正则表达式函数来实现的,$content是cms里的html文章. <?php $_a ...

  3. PS日记二(调色:色阶,曲线,色相/饱和度,色彩平衡,蒙板)

    基础知识一:在PS操作中为什么要复制图层(ctrl+J)? 答:复制图层主要是为了 备份原图层,在副本中进行操作 如果说你副本弄坏了,还有原来的PS复制图层一方面是保全原图.二是因为图层是ps操作的基 ...

  4. 【02】使用Firebug查看和编辑HTML和CSS

    使用Firebug查看和编辑HTML和CSS 描述 在本章节的教程中,我们将讨论如何使用Firebug查看和编辑HTML和CSS. 使用Firebug查看和编辑HTML 在你要查看的元素上右击鼠标然后 ...

  5. vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

    vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 ...

  6. MQ报错java.lang.IllegalStateException: Failed to load ApplicationContext

    这个问题是jdk版本造成的,把jdk1.8换成jdk1.7问题就解决了

  7. python学习笔记--python数据类型

    一.整形和浮点型 整形也就是整数类型(int)的,在python3中都是int类型,没有什么long类型的,比如说存年龄.工资.成绩等等这样的数据就可以用int类型,有正整数.负整数和0,浮点型的也就 ...

  8. BZOJ 1412: [ZJOI2009]狼和羊的故事【网络流】

    Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! O ...

  9. gridview读取Excel文件中的数据,并将其导入数据库

    原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] //将需要导入的文件上传到服务器           string filePath = "" ...

  10. 设置select的默认选项

    2014-01-07 09:54:34|   通过后台传出的值进行选择默认项的设置 <select name="user_id" id="user_id" ...