c 如何加函数锁linux,Linux下C语言中fcntl函数用法说明

本文最后更新于2017年8月18日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

学习、提高需要

正文:

参考解答:

fcntl – manipulate file descriptor (操作文件描述符)

fcntl()函数主要有5种功能:

复制一个现有的描述符(cmd=F_DUPFD/F_DUPFD_CLOEXEC)

获得/设置文件描述符标记(cmd=F_GETFD/F_SETFD)

获得/设置文件状态标记(cmd=F_GETFL/F_SETFL) #常用

获得/设置异步I/O所有权(cmd=F_GETOWN/F_SETOWN)

获得/设置记录锁(cmd=F_GETLK/F_SETLK/F_SETLKW) #常用

获取、设置文件状态标记样例:

&

&

常见用法就是——将socket fd设置为非阻塞模式:

获取、设置文件锁样例:

先在一个终端执行程序:

$ ./a.out

lock success

press any key to unlock

现在文件已经被锁住了,而且没有按下任何按键,所以卡在这里,也还没解锁,接着在另一个终端再次执行同一个程序:

$ ./a.out

lock fail: Resource temporarily unavailable

会立即返回错误,因为我们希望施加的是排他锁,而现在前面一个进程正在占用写锁还没释放,所以尝试施加锁失败,而如果fcntl()函数的cmd设置为 F_SETLKW,即带w的版本,则此进程会一直阻塞直到前面一个进程释放了锁。

参考链接:

=END=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值