linux 文件锁
创建锁文件对于资源的排他访问,例如串口,是相当合适的,但是对于访问大的共享文件就是太好了。假如我们拥有一个由一个程序写入的大文件,但是是由许多不同的程序进行持续更新的。当一个程序正在记录一些在较长的时间内所得到的数据,并且正在为其他的一些程序进行处理时就会出现这样的情况。这些正在处理的程序并不会等待日志程序结束--他们是连续运行的--所以他们需要一些合作的方法从而可以提供对于同一个文件的同时访问。
我们可以通过锁住文件的一个区域来到达这种结果,这样只是文件的某一个区域被锁住,但是其他程序可以访问程序的其他部分。这称之为文件段(file-segment),或是文件区域(file-region)。Linux有两种方法可以做到这一点:使用fcntl系统调用与使用lockf调用。我们会主要了解fcntl接口,因为这是最经常用到的接口。lockf是相对较为简单的,并且在Linux上只是fcntl的替换接口用法。然而,fcntl与lockf锁机制不可以同时工作:他们使用不同的底层实现,所以我们不能混用这两种调用;只使用这一种或是另一种。
我们在第3章介绍了fcntl调用。其定义如下:
#include <fcntl.h>
int fcntl(int fildes, int command, ...);
fcntl在文件描述符上进行操作,并且依据command参数可以执行不同的任务。而我们所感兴趣的有关文件锁的三个:
❑ F_GETLK
❑ F_SETLK
❑ F_SETLKW
当我们使用这些命令时,第三个参数必须是一个指向struct flock的指针,所以实际上的原型形式如下:
int fcntl(int fildes, int command, struct flock *flock_structure);
flock结构是依赖于实现的,但是他至少包含下面的成员:
❑ short l_type;
❑ short l_whence;
❑ off_t l_start;
❑ off_t l_len;
❑ pid_t l_pid;
l_type成员可以是几个值中的一个,这些值通常定义在fcntl.h中。如下表所示:
值 描述
F_RDLCK 共享锁(或读锁)。多个进程可以在文件的相同区域(或重叠)具有一个共享锁。如果任何进程在文件的某一部分具有一个共享锁,其他的进程就不可以在相同的区域获得排他锁。为了获得一个共享锁,文件必须使用读或是读写访问模式打开。
F_UNLCK 解锁;用于清除锁。
F_WRLCK 排他锁(或写锁)。在文件的某一个特定区域只可以有一个进程获得排他锁。一旦有一个进程具有一个这样的锁,其他的进程就不可以在此区域上获得任何锁类型。要获得一个排他锁,文件必须
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
linux目录架构
/ 根目录
/bin 常用的命令 binary file 的目錄
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内
/boot/grub/menu.lst GRUB设置
......
C字符串处理函数的实现(Linux)
#include <stddef.h>
char * ___strtok = NULL;
char * strcpy(char * dest,const char *src)
{
char *tmp = dest;
while ((*dest++ = *src++) != '\0')
/* nothing */;
return tmp;
}
char * strncpy(char * des ......
linux目录架构
/ 根目录
/bin 常用的命令 binary file 的目錄
/boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内
/boot/grub/menu.lst GRUB设置
/ ......