#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h> #define ERR_EXIT( m ) \
do \
{ \
perror( m ); \
exit( EXIT_FAILURE ); \
}while( 0 ) int main( int argc, char* argv[] ) { if( argc != 2 ) {
fprintf( stderr, "usage:%s filename", argv[0] );
exit( EXIT_FAILURE );
} int fd;
fd = open( argv[1], O_RDWR | O_TRUNC | O_CREAT, 0666 );
if( -1 == fd ) {
ERR_EXIT( "文件打开失败" );
} struct flock lock;
memset( &lock, 0, sizeof( lock ) ); lock.l_type = F_WRLCK; //写锁
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0; //加文件写锁, 另一个进程操作文件 直接报错
//int ret = fcntl( fd, F_SETLK, &lock );
//加文件写锁, 另一个进程操作文件 会等待这个进程释放锁
int ret = fcntl( fd, F_SETLKW, &lock );
if( -1 == ret ) {
ERR_EXIT( "加锁失败" );
}else {
printf( "加锁成功\n" );
printf( "输入任意字符解锁\n" );
getchar();
lock.l_type = F_UNLCK;
if ( fcntl( fd, F_SETLK, &lock ) == -1 ) {
printf( "释放锁失败\n" );
}else{
printf( "释放锁成功\n" );
}
} return 0;
}

  

linux编程fcntl获取和设置文件锁的更多相关文章

  1. linux编程fcntl获取和设置文件状态

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ...

  2. fcntl函数用法——设置文件锁

    fcntl函数.锁定文件,设置文件锁.设置获取文件锁:F_GETLK .F_SETLK  .F_SETLKW文件锁结构,设置好用于fcntl函数的第三个参数.struct flock{    shor ...

  3. Linux编程基础——GDB(设置断点)(转:TianFang,cnblog: http://www.cnblogs.com/TianFang/archive/2013/01/20/2868889.html)

    启动GDB后,首先就是要设置断点,程序中断后才能调试.在gdb中,断点通常有三种形式: 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种.设置断点的命令是break,它通 ...

  4. Linux编程基础——GDB(设置断点)

    启动GDB后,首先就是要设置断点,程序中断后才能调试.在gdb中,断点通常有三种形式: 断点(BreakPoint): 在代码的指定位置中断,这个是我们用得最多的一种.设置断点的命令是break,它通 ...

  5. Linux编程(获取系统时间)

    #include <stdio.h> #include <time.h> int main() { time_t now; struct tm *w; time(&no ...

  6. linux编程获取本机网络相关参数

    getifaddrs()和struct ifaddrs的使用,获取本机IP 博客分类: Linux C编程   ifaddrs结构体定义如下: struct ifaddrs { struct ifad ...

  7. Linux下通过ioctl系统调用来获取和设置网络信息

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...

  8. linux编程vim设置

    linux环境下c网络编程vim编辑工具设置,包括自动缩进,tab键对齐等.

  9. 【Linux环境编程】获取网卡的实时网速

    在windows以下.我们能够看到360或者是qq安全卫士的"安全球".上面显示实时的网速情况.那么在linux里面怎样获取网卡的实时网速?事实上原理非常easy,读取须要获取网速 ...

随机推荐

  1. Delphi 调用C# 编写的DLL方法

    近来,因工作需要,必须解决Delphi写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一个“ ...

  2. JS 算数

    JS 算数 Math(算数)对象的作用是:执行常见的算数任务. random() 来返回 0 到 1 之间的随机数. max() 来返回两个给定的数中的较大的数.(在 ECMASCript v3 之前 ...

  3. 12-Factor与微服务

           为了构建分布式微服务程序,能够部署到所有云服务,Heroku工程师总结所有云原生应用程序的12要素: 1.基准代码 Single codebase: The application mu ...

  4. web项目的初始搭建和intellij的tomcat的配置

    点击web application

  5. 一个diango项目的结构

    一个项目的结构 day43项目 .idea 配置 pycharm自动帮配的配置,打开别人的diango项目时要先删了此项 app01 方便在一个大的Django项目中,管理实现不同的业务功能 migr ...

  6. IDEA中写MyBatis的xml配置文件编译报错的坑

    IDEA中写MyBatis的xml配置文件编译报错的坑 说明:用IDEA编译工具在项目中使用Mybatis框架,编写mybatis-config.xml和Mapper.xml配置文件时,编译项目出现错 ...

  7. C语言程序设计100例之(23):数列求和

    例23  数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ...

  8. Python的生成器和生成器表达式

    一,生成器和生成器表达式 什么是生成器,生成器实质就是迭代器,在python中有三种方式来获取生成器: 1. 通过生成器函数 和普通函数没有区别,里面有yield的函数就是生成器函数,生成器函数在执行 ...

  9. 查看SpringBoot应用中的嵌入式tomcat的版本

    第一种,在启动springboot项目的时候,日志中可以看到 第二种,直接在maven依赖文件中查看 地址在:你的maven库文件夹/org/springframework/boot/spring-b ...

  10. (六十三)c#Winform自定义控件-箭头(工业)-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...