加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux编程fcntl获取和设置文件锁

发布时间:2020-12-14 00:48:31 所属栏目:Linux 来源:网络整理
导读:#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
#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,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,&lock ) == -1 ) {
                        printf( "释放锁失败n" );
                }else{
                        printf( "释放锁成功n" );
                }
        }

        return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读