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

news/2025/2/25 5:12:41/

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,得到并返回一个新的,很像上面的dup2.-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的话,还是不行的,因为只有只读和在尾部追加的权力,并没有写的权力,这个东西规定的死板的。


http://www.ppmy.cn/news/1574770.html

相关文章

【C#成品】FBro浏览器多开分组框架

杀毒报告&#xff1a; https://habo.qq.com/file/showdetail?pkADEGZV1vB24IP1s6U2oHYA%3D%3D https://habo.qq.com/file/showdetail?pkADEGZV1vB24IPls6U2oHYQ%3D%3D 浏览器多开分组框架 介绍 FBro浏览器多开分组框架独立缓存每个浏览器左上角有序号显示两种方式&#xff…

数字体验优化三步法:工具与技巧实战

内容概要 在数字化转型加速的今天&#xff0c;数字内容体验已成为企业与用户建立深度连接的核心竞争力。通过全渠道资源整合、数据驱动决策和动态内容适配三大支柱&#xff0c;企业能够构建从触达到转化的完整体验闭环。传统的内容管理模式往往存在资源分散、响应滞后等问题&a…

MobaXterm通过ssh远程连接Ubuntu的方法

MobaXterm通过ssh远程连接Ubuntu的方法 主要参见这篇博客 Ubuntu下sshd服务搭建&#xff08;详解&#xff0c;连接MobaXterm&#xff09;_ubuntu sshd-CSDN博客 步骤一、 Ubuntu下安装sshd服务 打开终端&#xff0c;输入指令 $ sudo apt install openssh-server

ZLG嵌入式笔记 | RTC时钟偶发性延时或超时该怎么办?

嵌入式系统运行时&#xff0c;RTC 时钟受多种因素干扰致延时或超时&#xff0c;影响系统时间同步与功能稳定。本文将提出从硬件适配到软件算法优化的综合性方案&#xff0c;以解决此问题&#xff0c;保障 RTC 时钟的精确性与可靠性。 引起延时和超时的主要原因是计时系统使用的…

win32汇编环境,对话框中使用菜单示例三

;运行效果 ;win32汇编环境,对话框中使用菜单示例三 ;鼠标点击右键时&#xff0c;弹出菜单的功能 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>>&g…

Redis数据结构总结-listPack

listPack 前言什么是listPack结构列表项元素的编码类型整数编码字符串编码 避免连锁更新的实现方式从左向右查询从右向左 总结 前言 quicklist 虽然通过控制 quicklistNode 结构里的压缩列表的大小或者元素个数&#xff0c;来减少连锁更新带来的性能影响&#xff0c;但是并没有…

ARM TCM(itcm和dtcm)

在嵌入式开发中&#xff0c;ITCM和DTCM是与内存相关的概念&#xff0c;主要用于提高处理器的数据访问速度和执行效率。下面我将逐步解释它们的含义和作用。 1. 基本概念 TCM&#xff1a;TCM代表“Tightly Coupled Memory”&#xff0c;即紧耦合内存。它是一种高速内存&#xf…

【Redis原理】底层数据结构 五种数据类型

文章目录 动态字符串SDS(simple dynamic string )SDS结构定义SDS动态扩容 IntSetIntSet 结构定义IntSet的升级 DictDict结构定义Dict的扩容Dict的收缩Dict 的rehash ZipListZipListEntryencoding 编码字符串整数 ZipList的连锁更新问题 QuickListQuickList源码 SkipListRedisOb…