在unp书中,关于函数fcntl的参数讲解的比较多,但是这个函数功能只有简单的一句话“fcntl函数可以改变已经打开文件的属性”。
我们知道,在Unix/linux环境下,不管是设备、I/O、socket等等,几乎一切都是文件,所以fcntl的功能就是对于这些设备、文件、I/O的属性进行设定,比如常用的功能:
1、复制一个已有的描述符,类似于dup函数功能。
2、获取/设置文件描述符标志。
3、获取/设置文件状态标志。
4、获取/设置一步I/O所有权。
5、获取/设置记录锁。

fcntl的功能很强大,也很全面,因为它是可以设置所有类型文件的属性,偏偏unix下几乎所有都是文件,关于它的具体用法,参数解释,这里就不赘述了,我们就举一个简单的例子,在前面的文章中,我们分析了“阻塞”和“非阻塞”,一般情况下,我们可以通过open操作时,通过O_NONBLOCK或O_NDELAY直接设置为非阻塞,这个时候是不需要fcntl的,但是如果open时并没有设定非阻塞时,但是设备已经打开了,这个时候就可以通过fcntl进行设置了,而且fcntl设置的结果是最终的结果,比如open函数指定为阻塞,那么后面调用fcntl设置为非阻塞,那么最终这个设备是“非阻塞”模式。
另外还有socket编程,由于没有open函数,在建立连接后,是可以通过fcntl对socket进行设置非阻塞的。

fcntl函数的作用及应用场景相关推荐

  1. bind函数作用、应用场景以及模拟实现

    bind函数 bind 函数挂在 Function 的原型上 Function.prototype.bind 创建的函数都可以直接调用 bind,使用: function func(){console ...

  2. linux fcntl 函数 文件描述符选项控制

    功能描述:根据文件描述词来操作文件的特性. #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); ...

  3. python主函数的作用_python中main函数的用法

    原博文 2020-03-27 20:25 − **什么场景下会有main函数?** 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行. **ma ...

  4. Linux 系统 文件锁 fcntl函数详解

    #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int ...

  5. 【Android 逆向】ptrace 函数 ( C 标准库 ptrace 函数简介 | ptrace 函数真实作用 )

    文章目录 一.C 标准库 ptrace 函数简介 二.ptrace 函数真实作用 一.C 标准库 ptrace 函数简介 ptrace 函数 : 在 C 标准库 中有一个 ptrace 函数 , 该函 ...

  6. sigaction 函数,sigemptyset()函数,fcntl()函数,isatty()函数

    第一个函数:使用 sigaction函数: signal 函数的使用方法简单,但并不属于POSIX标准,在各类UNIX平台上的实现不尽相同,因此其用途受 到了一定的限制.而 POSIX标准定义的信号处 ...

  7. python函数的作用降低编程复杂度_Python函数式编程

    lambda 本文将介绍Python中函数式编程的特性.在对函数式编程的概念有了了解后,本文会介绍iterators和generators等语言特性,还有itertools和functools等相关的 ...

  8. fcntl函数(网络编程会用)

    #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd): int fcntl(int fd, int ...

  9. 3.1.13.fcntl函数介绍

    3.1.13.fcntl函数介绍 读: f啃处 3.1.13.1.fcntl的原型和作用 (1)fcntl函数是一个多功能文件管理的工具箱,接收2个参数+1个变参.第一个参数是fd表示要操作哪个文件, ...

  10. c语言中fcntl.h函数库,fcntl函数的使用详解

    (1)fcntl函数说明 前面的这5个基本函数实现了文件的打开.读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用.操作一个文件的情况,这时,Linux 通常 ...

最新文章

  1. sh脚本每天创建一个文件夹_我每天创建一个月的视频。 这就是发生的事
  2. Java单元测试的意义_单元测试重要意义及方法介绍
  3. java 1_java基本语法1
  4. vue脚手架中使用axios
  5. Leetcode 147.对链表进行排序
  6. python 操作oracle 执行脚本_python、abaqus执行脚本路径
  7. httpd2.4源码编译
  8. java strim性能_Java代码性能优化总结
  9. mybatis SqlMapConfig.xml typeAliases
  10. 【企业】走近华为,微观世界
  11. 一位教授跟我说:线性代数应该这样学
  12. namenode启动报错:There appears to be a gap in the edit log. We expected txid 1, but got txid 16
  13. 扬帆际海—开网店怎么引流推广?
  14. 三维动画与企业宣传片的制作方案
  15. 百兆以太网口通信速率_以太网发送速率(传输速率)和传播速率
  16. RMAN Crosscheck/Delete
  17. 总结Python中的字符串格式化
  18. Revit二次开发之族库管理系统
  19. The Devil Wears Prada-3
  20. 苹果4s怎么越狱教程_教你苹果手机(iPhone)上怎么装KODI (不用越狱)

热门文章

  1. Typora图片不显示问题解决方案【Typora + Gitee + PicGo配置图床】
  2. 威纶通触摸屏如何打开并升级EB8000旧版本项目并更换触摸屏型号?
  3. 改MD5防止你的视频被百度云秒和谐
  4. 苹果cms模板_苹果cmsv10简约模板有哪些?
  5. OFD文件如何打印?怎么打开?如何转换PDF?
  6. 使用inno setup制作安装包
  7. 怎么把安装包挂在HTML,怎么把安装包拷贝到u盘
  8. Mac下载及安装Tomcat
  9. 海康威视4路播放封装----安卓开发
  10. shell脚本学习教程(全网最全教学)