linux -对文件描述符的操作dup、fcntl有五种

dup

#include<unistd.h>
int dup(int oldfd);
	作用:复制一个新的文件描述符
		fd = 3, int fd1 = dup(fd);
		f指向的是a.txt,fd1指向的也是a.txt
		从空闲的文件描述符表中找一个最小的作为新的拷贝的文件描述符
	返回:成功返回新的文件描述符,失败返回-1

dup2

#include<unistd.h>
int dup2(int oldfd, int newfd);
	作用: 重定向文件描述符
		oldfd指向1.txt,newfd原本指向2.txt
		调用成功后,newfd和b.txt自动做close,同时newfd指向了a.txt
		如果old和new的值相同,是同一个文件描述符,相当于上面都没做
	返回:成功返回新的文件描述符,失败返回-1

fcntl

有五种用法,常用的两种

#include <unistd.h>
#include <fcntl.h>

int fcntl(int fd, int cmd, ... /* arg */ );
	参数:
		fd:需要被操作的文件描述符
		cmd:表示对文件描述符如何操作的命令
		1.
			-F_DUPFD : 复制文件描述符,复制fd,得到并返回一个新的,很像上面的dup
		2.
			-F_GETFL : 获取指定的文件描述符的flag,就是O_RDONLY这样的
			-F_SETFL : 设置文件描述符文件状态flag
				必选项: O_RDONLY,O_WRONLY,O_RDWR 不可以被修改
				可选项: O_APPEND表示追加数据, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK设置成阻塞

阻塞和非阻塞:描述的是函数调用的行为

eg:第二种改写文件描述符状态的操作示例

//假设一开始打开的时候,传入的文件描述符状态是只写状态
int fd = open("1.txt",O_WRONLY);
if(fd == -1){
	perror("open");
	return -1
}
//获取当前文件描述符的状态flag
int flag = fcntl(fd, F_GETFL);
flag += O_APPEND;
//修改文件描述符状态的flag,给falg变成上面修改的新的flag
int ret = fcntl(fd,F_SETFL, flag);
char* str = "nihao";
write(fd,str,strlen(str));
close(fd);
//这样nihao就可以添加在后面了,这就达到了修改的目的

如果一开始传入的是O_RDONLY,然后后面再加上O_APPEND的话,还是不行的,因为只有只读和在尾部追加的权力,并没有写的权力,这个东西规定的死板的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975620.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型

线程同步 条件变量 当一个线程互斥地访问某个变量时&#xff0c;它可能发现在其它线程改变状态之前&#xff0c;它什么也做不了。 例如&#xff1a;一个线程访问队列时&#xff0c;发现队列为空&#xff0c;它只能等待&#xff0c;直到其它线程将一个节点添加到队列中。这…

ChatGPT各模型版本对比分析

文章目录 1. GPT-3.5&#xff08;2022年11月&#xff09;2. GPT-4&#xff08;2023年3月&#xff09;3. GPT-4o&#xff08;2024年5月&#xff09;4. GPT-4o mini&#xff08;2024年7月&#xff09;5. o1系列&#xff08;2024年9月至12月&#xff09;6. o3-mini&#xff08;202…

萌新学 Python 之自定义函数

函数主要用来封装功能&#xff0c;具有独立功能的代码块&#xff0c;可以提高代码重复利用率&#xff0c;便于模块管理 函数的定义&#xff1a; def 函数名(形参): 函数体&#xff0c;独立功能的代码 return ‘函数的返回值’ 函数注意事项&#xff1a; 1.函数的命名通常使…

【工作流】Spring Boot 项目与 Camunda 的整合

【工作流】Spring Boot 项目与 Camunda 的整合 【一】Camunda 和主流流程引擎的对比【二】概念介绍【1】Camunda 概念&#xff1a;【2】BPMN 概念 【三】环境准备【1】安装流程设计器CamundaModeler【画图工具】&#xff08;1&#xff09;下载安装 【2】CamundaModeler如何设计…

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 &#xff08;一&#xff09;基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 &#xff08;二&#xff09;套接字编程接口 1、socket 常见API 2、sockaddr结构 &#xff08;三&#xff09;UDP套接字 1、UDP服务器创建…

【图像处理】:两幅图中相同区域的相似度比较

两幅图中相同区域的相似度比较 1.OpenCV和Python实现的两幅图相似度衡量方法1. 均方误差&#xff08;MSE&#xff09;2. 结构相似性指数&#xff08;SSIM&#xff09;图像协方差能显示结构特征的原因 3. 直方图相似度4. 特征点匹配5. 相关系数&#xff08;Pearson Correlation&…

[python脚本]论文1.(一)CPU/内存数据分析和分组

CPU 收集到的CPU数据&#xff0c;格式如下&#xff1a; 由于这里6个数据为一组来收集latency的数据以及各个分位值的数据&#xff0c;而本质上每一行都是一次完整的测试&#xff0c;因此这里将这个csv文件分为两个文件&#xff0c;第一个是和latency相关的&#xff0c;将6条数…

綫性與非綫性泛函分析與應用_1.例題(下)-半母本

第1章 實分析與函數論:快速回顧(下) 五、基數;有限集和無限集相關例題 例題1:集合基數的判斷 判斷集合和集合B=\{a,b,c,d,e\}的基數關係。 解析: 可以構造一個雙射,例如,,,,。 所以,兩個集合具有相同的基數。 例題2:可數集的證明 證明整數集是可數集。 解析: …

MQTT实现智能家居------3、源码分析(超详细)

一、连接服务器 1、初始化&#xff1a; mqtt_log_init();是一个空函数&#xff0c;自己定义宏 client mqtt_lease();//创建一个client结构体&#xff0c;从此以后client代表客户端 platform_memory_alloc();//是一个分配内存的总函数&#xff0c;可以适用于Linux、FreeRTos…

Qt常用控件之日历QCalendarWidget

日历QCalendarWidget QCalendarWidget 是一个日历控件。 QCalendarWidget属性 属性说明selectDate当前选中日期。minimumDate最小日期。maximumDate最大日期。firstDayOfWeek设置每周的第一天是周几&#xff08;影响日历的第一列是周几&#xff09;。gridVisible是否显示日历…

智慧废品回收小程序php+uniapp

废品回收小程序&#xff1a;数字化赋能环保&#xff0c;开启资源循环新时代 城市垃圾治理难题&#xff0c;废品回收小程序成破局关键 随着城市化进程加速与消费水平提升&#xff0c;我国生活垃圾总量逐年攀升&#xff0c;年均增速达5%-8%&#xff0c;其中超30%为可回收物。然…

SkyWalking集成Kafka实现日志异步采集经验总结

SkyWalking日志异步采集架构 【重点知识】 1、【Agent】kafka-reporter-plugin-x.x.x.jar包放plugins目录后必走kafka&#xff08;kafka没有正确配置就会报错&#xff09; 2、【Agent】异步如不开启数据压缩&#xff0c;日志数据较大&#xff0c;pod多、业务大时容易造成网络…

C++第十六讲:红黑树

C第十六讲&#xff1a;红黑树 1.什么是红黑树1.1红黑树的特点 2.MyRBTree实现2.1红黑树的结构2.2红黑树的插入2.2.1插入的总体逻辑2.2.2情况一&#xff1a;变色2.2.3情况二&#xff1a;单旋 变色2.2.4情况三&#xff1a;双旋 变色2.2.4插入代码总结 2.3红黑树的检查2.4完整代…

KubeKey一键安装部署k8s集群和KubeSphere详细教程

目录 一、KubeKey简介 二、k8s集群KubeSphere安装 集群规划 硬件要求 Kubernetes支持版本 操作系统要求 SSH免密登录 配置集群时钟 所有节点安装依赖 安装docker DNS要求 存储要求 下载 KubeKey 验证KubeKey 配置集群文件 安装集群 验证命令 登录页面 一、Ku…

Java 值传递

1 形参&实参 方法的定义可能会用到参数&#xff0c;参数在程序语言中分为&#xff1a; 实参&#xff1a;用于传递给函数/方法的参数&#xff0c;必须有确定的值。 形参&#xff1a;用于定义函数/方法&#xff0c;接收实参&#xff0c;不需要有确定的值。 String hello …

开源一款I2C电机驱动扩展板-FreakStudio多米诺系列

总线直流电机扩展板 原文链接&#xff1a; FreakStudio的博客 摘要 设计了一个I2C电机驱动板&#xff0c;通过I2C接口控制多个电机的转速和方向&#xff0c;支持刹车和减速功能。可连接16个扩展板&#xff0c;具有PWM输出、过流过热保护和可更换电机驱动芯片。支持按键控制…

论文笔记(七十二)Reward Centering(三)

Reward Centering&#xff08;三&#xff09; 文章概括摘要3 基于值的奖励中心化4 案例研究&#xff1a; 以奖励为中心的 Q-learning5 讨论、局限性与未来工作致谢 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan…

内部知识库的核心模块是什么?

内容概要 现代企业内部知识库的架构设计遵循系统性、可扩展性与安全性三重原则&#xff0c;其核心模块的协同运作构成完整的知识资产运营体系。在知识存储层&#xff0c;基于结构化分类的存储管理采用多级目录架构&#xff08;如客户服务库、培训学习库&#xff09;&#xff0…

kafka基本知识

什么是 Kafka&#xff1f; Apache Kafka 是一个开源的分布式流处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;后来成为 Apache 软件基金会的一部分。Kafka 主要用于构建实时数据管道和流处理应用程序。它能够高效地处理大量的数据流&#xff0c;广泛应用于日志收集、数…

P8716 [蓝桥杯 2020 省 AB2] 回文日期

1 题目说明 2 题目分析 暴力不会超时&#xff0c;O(n)的时间复杂度&#xff0c; < 1 0 8 <10^8 <108。分析见代码&#xff1a; #include<iostream> #include<string> using namespace std;int m[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};// 判断日期…