#include <unistd.h>

#include <fcntl.h>

int fcntl(int fd, int cmd);

int fcntl(int fd, int cmd, long arg);//long 长整型

int fcntl(int fd, int cmd, struct flock *lock);

可见fcntl函数是一个可变参数函数(函数的形参数目和类型不只是一种)。

作用:改变已经打开的文件的属性,如一个文件以只读的方式打开后,如果想要再不关闭重新打开文件的前提下可以向文件里追加写入内容,则可以使用fcntl函数来修改其属性。

下面仅介绍常用的情况:第一个函数和第二个函数。

int fcntl(int fd, int cmd); 用于实现文件描述符的拷贝(重定向),功能与dup一样。cmd采用参数:F_DUPFD(宏定义)。 返回值则为复制的文件描述符,错误返回-1。

int fcntl(int fd, int cmd, long arg); 用于实现:1.获得文件状态标记;2.设置文件状态标记。

获得文件状态标记:cmd指定为F_GETFL,第三个参数arg直接为0即可,返回值即为文件状态标记:O_RDONLY(只读打开)、O_WRONLY(只写打开)、O_RDWR(读写打开)、O_EXEC(执行打开)、O_SEARCH(搜索打开目录)、O_APPEND(追加写)、O_NONBLOCK(非阻塞模式),这些参数都是宏定义,为int型。错误则返回-1。

设置文件状态标记(即在文件打开的情况下可修改文件属性):cmd参数为F_SETFL,第三个参数arg(长整型)为:O_APPEND(可追加写)、O_NONBLOCK(设置为非阻塞模式)。

其它功能:1.获得或设置文件描述符标记,cmd参数为:F_GETFD或F_SETFD。2.获得或设置异步I/O所有权,cmd参数为:F_GETOWN或F_SETOWN。3.获得或设置记录锁,cmd参数为:F_GETLK、F_SETLK或F_SETLKW。

//在文件只读情况下,修改为可追加写入
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>int main(void)
{int fd;int flag;// 测试字符串char *p = "我们是一个有中国特色的社会主义国家!!!!!!";char *q = "社会主义好哇。";// 只写的方式打开文件fd = open("test.txt", O_WRONLY);if(fd == -1){perror("open");exit(1);}// 输入新的内容,该部分会覆盖原来旧的内容if(write(fd, p, strlen(p)) == -1){perror("write");exit(1);}// 使用 F_GETFL 命令得到文件状态标志flag = fcntl(fd, F_GETFL, 0);if(flag == -1){perror("fcntl");exit(1);}// 将文件状态标志添加 ”追加写“ 选项flag |= O_APPEND;     // flag = flag | O_APPEND 这是一个位或运算   注意使用方法!!!// 将文件状态修改为追加写if(fcntl(fd, F_SETFL, flag) == -1){perror("fcntl -- append write");exit(1);}// 再次输入新内容,该内容会追加到旧内容的后面if(write(fd, q, strlen(q)) == -1){perror("write again");exit(1);}// 关闭文件close(fd);return 0;
}

fcntl函数(网络编程会用)相关推荐

  1. (二)socket收发准备函数——网络编程

    (1)主机字节序与网络字节序 字节序是指内存多于一个字节类型的数据在内存中的存放顺序. 一种是将低序字节存储在起始地址,这种称为小端(little-endian)字节序. 一种是将高序字节存储在起始地 ...

  2. 网络编程——listen、conect、inet_pton等网络编程函数详解

    前言 自己在学习网络编程的所思所感所悟,记录于此,如果还有幸能帮助到您,是我的荣幸!很多网络编程的函数都没有见过也忘记了他的头文件,怎么办?在linux上使用man手册查函数即可,windows查ms ...

  3. UNIX网络编程——fcntl函数

    fcntl函数提供了与网络编程相关的如下特性: 非阻塞式I/O.  通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型. 信号驱动式I/O. 通过使用F ...

  4. Linux网络编程 | 信号 :信号函数、信号集、统一事件源 、网络编程相关信号

    文章目录 信号函数 信号集 统一事件源 网络编程相关信号 Linux 进程信号:信号的概念.生命周期.产生流程.阻塞 在半年前我写过一篇博客介绍了Linux中信号的概念以及处理流程,这次再来深入的讲一 ...

  5. 网络编程函数小总结与初识socket

    总结服务器端的函数和客户端的函数 再次声明博主写的都是对于linux下的网络编程,没有写关于Windows的网络编程,也许以后会写到. 这里只是总结一下,具体参数的含义等后面的跟新 1. #inclu ...

  6. 网络编程 -- gethostbyname() 函数解析

          最近一段时间在看网络编程的东西,其中的一些函数很是好用,故留下笔记在这.       首先,在了解这个函数之前,我们需要知道一个结构 -- struct hostent struct ho ...

  7. linux网络编程常用函数详解与实例(socket--bind--listen--accept)

    常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可 ...

  8. linux socket读写函数,Linux网络编程入门

    第一个函数是socket函数. socket函数的Linux头文件以及函数定义如下: #include int socket(int domain, int type, int protocal); ...

  9. linux下read函数缺失字节_机器人、工控机和Linux 网络编程接口能否蹭出火花?

    今日份干货分享 随着全国大学生机器人大赛的不断发展,机器人的控制器也由以单片机为主的控制器逐渐转向以工控机为主的控制器,工控机上可以跑操作系统,系统的实时性以及对大数据的处理性也十分不错.以后机器人的 ...

最新文章

  1. 一则鬼故事:如果全世界程序员都消失了
  2. webApp移动开发之REM
  3. elastic ik分词搜索_php环境下使用elasticSearch+ik分词器进行全文搜索
  4. oracle视图能增删改,oracle视图的增删改
  5. TPAMI 2020 | 无监督多类域适应:理论,算法与实践
  6. 腾讯qq帮你装silverlight
  7. 关于cocos creator换装功能的实践与思考
  8. Linux设备驱动入门----globalmem字符设备驱动
  9. java命令运行jar包出现返回值的乱码问题,设置启动编码方式
  10. rc.local介绍(linux启动系列之一)
  11. discuz php mysql_php下mysql数据库操作类(改自discuz)
  12. hdu-1695 GCD(莫比乌斯反演)
  13. jar包add to build path与放入lib下
  14. 漂亮的thinkphp 跳转页封装
  15. IOS CA服务器和客户端的配置
  16. 无线通信数字调制技术
  17. java now_Java LocalDateTime now()用法及代码示例
  18. c语言键盘符号大全,c语言实现数学符号软键盘源码
  19. 信用卡逾期怎么办,如何让信用卡不逾期?
  20. PHP 在线预览文档

热门文章

  1. lintcode :Integer to Roman 整数转罗马数字
  2. SharePoint 2013 开发——其他社交功能
  3. centos6.5安装配置LDAP服务[转]
  4. HDU 2836 Traversal 简单DP + 树状数组
  5. react打包后图片丢失_手搭一个 React,Typescript,Koa,GraphQL 环境
  6. php date当天,php5中date()获得的时间不是当前时间的解决方法
  7. 云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server
  8. android webview sql database,websql在openDatabase报version mismatch错误,请问怎么解决?
  9. java web开发技术大_2021年六大javaweb开发主流技术
  10. 读取nas_NAS怎么玩?除了存放小姐姐,它竟然还有这些功能