linux编程fcntl获取和设置文件锁
2024-08-31 09:37:08
#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;
}
最新文章
- .htaccess绑定网站主目录的方法
- Sublime Text 3 使用总结
- git commit 之后 push 之前,想删除 个别的commit 文件
- css控制内容显示,自动加";...";
- 转 JavaScript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
- codeforces 598B Queries on a String
- loadrunner11的移动端性能测试之脚本录制
- Noj - 在线强化训练3
- Linux系统IO分析工具之iotop常用参数介绍
- Ajax 及里面的XStream《黑马程序员_超全面的JavaWeb视频教程vedio》
- C语言学习 例四
- bzoj4448 情报传递
- STM32 LSM6DSL 陀螺仪数据采集
- 【Java】返回长度为零的数组或者集合,而不是null
- js 面向对象式编程
- mysql5.7启动slave报错 ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
- PHP和JS中全局变量和局部变量
- appium---【Mac】Appium-Doctor提示WARN:“ opencv4nodejs cannot be found”解决方案
- 第十一章 PhpMyAdmin连接远程mysql服务器---连接openwrt 703N服务器
- php -- 魔术方法 之 删除属性:__unset()