int testfd; /* fd for test*/

if((testfd = open("/usr/local/pgsql/bin/test_fd",O_RDWR|O_CREAT,0666)<0))
{
perror("open test_fd is error!");
exit(1);
}

/* add fcntl lock function file_lock(int fd,int type) */
void file_lock (int fd,int type)
{
struct flock lock;
lock.l_type = type;
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;

while(1)
{
if ((fcntl(fd,F_SETLK,&lock)==0))
{
if (lock.l_type == F_RDLCK)
printf("you got a readlock,the pid = %d",getpid());
if (lock.l_type == F_WRLCK)
printf("you got a writelock,the pid =%d",getpid());
if (lock.l_type == F_UNLCK)
printf("you got a realeselock,the pid = %d",getpid());
return ;/* add lock success and return */
}
/* add lock fail */
fcntl(fd,F_GETLK,&lock); /* get file lock info ,give it to lock */
if (lock.l_type!=F_UNLCK) /* reason of can't add lock */
{
if (lock.l_type == F_RDLCK) /* there is a read lock */
printf("it is already a lock!thd pid =%d\n",lock.l_pid);
else if (lock.l_type ==F_WRLCK) /* there is a write lock */
printf("it is already a write lock!the pid =%d\n",
lock.l_pid);
//getchar();
}
}
}

file_lock(testfd,F_WRLCK);//加锁

//需要保护的操作

file_lock(testfd,F_UNLCK);//解锁

用fcntl锁一个文件来保护操作的更多相关文章

  1. PHP文件操作 之读取一个文件(以二进制只读的方式打开)

    最近应用了文件的读取,顺便复习一下! //读取一个文件 $f = fopen($filename,'rb'); $f: 表示返回的一个资源句柄 $filename:要打开的文件路径 rb:参数,表示只 ...

  2. python(三)一个文件读写操作的小程序

    我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...

  3. PHP文件操作 之往一个文件写入数据

    //打开一个文件 $f = fopen($filename,'wb'); $filename:打开一个文件,不存在则自动创建,如果不能创建,说明指定的文件目录有错误 wb:写入的方式 ---- 覆盖原 ...

  4. Java基础面试操作题:读取该文件内容,并按照自然顺序排序后输出到 另一个文件中

    package com.swift; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  5. Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的.java文件复制到另一个文件夹下的.txt文件

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  6. C++中文件的读取操作,如何读取多行数据,如何一个一个的读取数据

    练习8.1:编写函数.接受一个istream&参数,返回值类型也是istream&.此函数必须从给定流中读取数据,直至遇到文件结束标识时停止. #include <iostrea ...

  7. 文件I/O操作(1)

    linux系统调用和用户编程接口(api) 系统调用是指在操作系统提供给用户程序调用的一组“特殊”的接口,用户程序可以通过这组特殊的接口来获取操作系统内核提供的服务,例如用户可以通过进程控制相关的系统 ...

  8. Linux文件的IO操作 一

    系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

  9. IO系统-文件与目录操作

    1.文件内核数据结构 一个打开的文件在内核中使用三种数据结构表示: (1)文件描述符表 文件描述符标志 文件表项指针 (2)文件表项: 文件状态标志:读.写.追加.同步和非阻塞等状态标志 当前文件偏移 ...

随机推荐

  1. bzoj1797: [Ahoi2009]Mincut 最小割(最小割+强联通tarjan)

    1797: [Ahoi2009]Mincut 最小割 题目:传送门 题解: 感觉是一道肥肠好的题目. 第二问其实比第一问简单? 用残余网络跑强联通,流量大于0才访问. 那么如果两个点所属的联通分量分别 ...

  2. 安卓获取百度地图的Api key

    1.进入开发中心 2.如何获取SHA1 3.如何获取包名

  3. php设计模式之工厂方法模式

    php设计模式之工厂方法模式 工厂方法模式 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Pol ...

  4. httputil用http获取请求的工具类

    package com.xiaocan.demo.util; import java.io.IOException; import java.io.InputStream; import java.u ...

  5. MYSQL5.6/5.7 数据库密码丢失问题处理(需重启)

    文章结构图: 一.MYSQL5.6密码丢失 1.  强行停止MYSQL 丢失超级管理用户ROOT的密码是致命的,可以通过--skip-grant-tables参数来跳过权限表. 停止MYSQL,强行杀 ...

  6. Fork and Join: Java Can Excel at Painless Parallel Programming Too!---转

    原文地址:http://www.oracle.com/technetwork/articles/java/fork-join-422606.html Multicore processors are ...

  7. SQL使用技巧-批量删除-批量更新-bcp导出-跨服务器sql

    1.循环删除数据   while @@rowcount>0 begin      delete top (1000)  from  T   where OperateTime >=2014 ...

  8. opengl问题

    1.glCreateShader(GL_VERTEX_SHADER)失败原因: 在调用glewInit()初始化之后才能create shader;

  9. Collections库使用

    Date: 2019-05-27 Author: Sun Collections库 ​ Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collec ...

  10. 服务器搭建域控与SQL Server的AlwaysOn环境过程(三)配置故障转移

    0 引言 主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的. 在讲解步骤之前需要了解一下故障转移集群仲裁配置 下面图片来自<Windows Server20 ...