当前位置: 首页 > news >正文

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的话,还是不行的,因为只有只读和在尾部追加的权力,并没有写的权力,这个东西规定的死板的。

相关文章:

  • 基于SpringBoot+mybatisplus+vueJS的Cosplay文化展示与交流社区设计与实现
  • 机器学习数学通关指南——泰勒公式
  • C++....................4
  • 【亲测有效】百度Ueditor富文本编辑器添加插入视频、视频不显示、和插入视频后二次编辑视频标签不显示,显示成img标签,二次保存视频被替换问题,解决方案
  • 【C语言】第八期——指针、二维数组与字符串
  • 5 算法1-4 数楼梯
  • springcloud springboot区别
  • pyside6学习专栏(七):自定义QTableWidget的扩展子类QTableWidgetEx
  • docker下安装 es 设置账号密码
  • Android 串口通信
  • 在arm64设备(树莓派4B)上部署Hyperledger Fabric V2.5
  • 详解 为什么 tcp 会出现 粘包 拆包 问题
  • AI知识架构之AI大模型
  • 前端PDF转图片技术调研实战指南:从踩坑到高可用方案的深度解析
  • Qt 中的线程池QRunnable和QThreadPool
  • 【Python爬虫(46)】解锁分布式爬虫:实时数据处理的奥秘
  • 蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)
  • ROS2 中 TF 变换发布与订阅:实现 base_link 和 test_link 实时可视化显示
  • 认知重构 | 自我分化 | 苏格拉底式提问
  • ubuntu磁盘挂载
  • 做推广那个网站比较靠谱/国内新闻大事20条简短
  • 餐饮品牌网站建设/合肥推广外包公司
  • 网站建设背景/正安县网站seo优化排名
  • 怎么做一淘宝客网站/成都新站软件快速排名
  • 集美区网站建设/上海十大营销策划公司
  • 海南省住房与城乡建设厅网站可查/互联网推广有哪些方式