Linux中的lseek 函数与fcntl函数

news2024/12/26 21:52:56

lseek 函数

所有打开的文件都有一个当前文件偏移量(current file offset),也叫读写偏移量和指针。文件偏移量通常是一个非负整数,用于表明文件开始处到文件当前位置的字节数(下一个read()或write()操作的文件起始位置)。文件的第一个字节的偏移量为0。

文件打开时,会将文件偏移量设置为指向文件开始(使用O_APPEND除外),以后每次read()和write()会自动对其调整,以指向已读或已写数据的下一字节。因此连续的read()和write()将按顺序递进,对文件进行操作。使用Iseek函数可以改变文件的偏移量。

函数描述:

移动文件指针

头文件:

1.#include

2.#include

函数原型:

off_t lseek(int fd, off_t offset, int whence);

函数参数:

1.fd:文件描述符

2.offset:字节数,以whence参数为基点解释offset

3.whence:解释offset 参数的基点

1)SEEK_SET:文件偏移量设置为offset

2)SEEK_CUR:文件偏移量设置为当前文件偏移量加上offset,offset可以为负数

3)SEEK_END:文件偏移量设置为文件长度加上offset ,offset可以为负数

函数返回值:

若Iseek成功执行,则返回新的偏移量。

失败返回-1并设置errno

lseek 函数常用操作:

1.文件指针移动到头部

Iseek(fd, 0, SEEK_SET);

2.获取文件指针当前位置

int len = Iseek(fd, 0, SEEK_CUR);

3.获取文件长度

int len = Iseek(fd, 0, SEEK_END);

4.Iseek实现文件拓展

1)Iseek(fd, n,SEEK_END);//扩展n个字节

2)write();//扩展后需要执行一次写操作才能扩展成功

int fd=open("./a.txt",O_RDWR);
char buf[1024];
int ret=read(fd,buf,sizeof(buf));
int offset=lseek(fd,0,SEEK_CUR);//获取当前文件偏移量
printf("offset=%d\n",offset);
int len=lseek(fd,0,SEEK_END);//获取文件长度
printf("len=%d\n",len);
lseek(fd,0,SEEK_SET);//文件指针指向头部
lseek(fd,1000,SEEK_END);//从文件尾部开始向后扩展1000字节
write(fd," ",1);//为了扩展成功,所编写一个数据
len=lseek(fd,0,SEEK_END);
printf("lenght=%d\n",len);
close(a.txt);

fcntl函数

函数描述:

对打开的文件描述符进行控制,如获取或修改打开文件的状态标志(对应open函数的flags参数)

函数原型:

int fcntl(int fd, int cmd, .../* arg */);

函数参数:

1.fd:要控制的文件描述符

2.cmd:不同值对应不同的操作

1) cmd为F_GETFL:获取文件描述符的flag值

2)cmd为F_SETFL:设置(修改)文件描述符的flag值

3)cmd为F_DUPFD:复制文件描述符,与dup()函数功能相同

函数返回值:返回值取决于 cmd

1.成功

1).若cmd为F_DUPFD,返回一个新的文件描述符

2.)若cmd为F_GETFL,返回文件描述符的flags值

3).若cmd为F_SETFL,返回0

2.失败返回-1,并设置errno值

fcntl函数常用的操作:

1.获取文件的属性标志

int flags=fcntl(fd,F_GETFL):

int fd=open("./a.txt",O_RDONLY|O_NONBLOCK);
printf("fd=%d\n",fd);
int flags=fcntl(fd,F_GETFL);
if(flags&O_NONBLOCK){
    printf("flags include O_NONBLOCK\n");
}
//O_RDONLY  为0,flags 需要和O_ACCMODE按位与后判断:
if((flags&O_ACCMODE)==O_RDONLY){
    printf("flags include O_RDONLY\n");
}

2.修改文件状态标志(只允许修改某些标志 如:O_APPEND,O_NONBCLOK)

1)flags=flags | O_NONBCLOCK

2)fcntl(fd,F_SETFL,flag)

#include<errno.h>
int flags=fcntl(0,F_GETFL);
flags|=O_NONBCLOCK;
fcntl(0,F_SETFL,flags);
char buf[1024];
int read_count=read(0,buf,sizeof(buf));
if(read_count==-1&& errno==ENGAIN){
    printf("errno is EAGAIN\n");
}
printf("read_count=%d\n",read_count);
write(1,buf,read_count);

3.复制文件描述符,使用大于等于startfd 的最小未用值作为新的文件描述符

int newfd=fcntl(fd,F_DUPFD,startfd);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyExcel停更,FastExcel接力

11月6日消息&#xff0c;阿里巴巴旗下的Java Excel工具库EasyExcel近日宣布&#xff0c;将停止更新&#xff0c;未来将逐步进入维护模式&#xff0c;将继续修复Bug&#xff0c;但不再主动新增功能。 EasyExcel以其快速、简洁和解决大文件内存溢出的能力而著称&#xff0c;官方…

Python PDF批量加密工具

Python PDF批量加密工具 1.简介&#xff1a; ‌一个Python写的PDF批量加密工具。PDF批量加密‌是一种保护PDF文件安全性的方法&#xff0c;通过为多个PDF文件设置相同的密码&#xff0c;防止未经授权的用户访问这些文件。批量加密可以大大提高工作效率&#xff0c;特别是在处…

项目2路由交换

背景 某学校为满足日常教学生活需求&#xff0c;推动数字校园的建设&#xff0c;学校有办公楼和学生宿舍楼和服务器集群三块区域&#xff0c;请合理规划IP地址和VLAN&#xff0c;实现企业内部能够互联互通现要求外网能通过公网地址访问服务器集群&#xff0c;学生和老师能正常…

知识梳理笔记--Kerberos 协议

Kerberos 协议概述 Kerberos 是一种计算机网络认证协议&#xff0c;旨在为不安全的网络提供强认证服务。它通过中心化的身份验证系统&#xff08;即 Key Distribution Center&#xff0c;KDC&#xff09;来确保通信双方的身份验证和数据加密。Kerberos 协议主要用于确保计算机系…

9个用于测试自动化的最佳AI测试工具(2024)

选择一款优质的基于生成式AI人工智能的测试工具能够确保测试过程的准确性和效率&#xff0c;从而加速整个软件测试周期。相反&#xff0c;设计不佳的测试工具可能无法发现错误&#xff0c;并可能存在安全问题。它们可能产生误报或漏报&#xff0c;误导开发与测试团队&#xff0…

uni-app 跨端开发精美开源UI框架推荐

&#x1f380;&#x1f380;&#x1f380;uni-app 跨端开发系列 &#x1f380;&#x1f380;&#x1f380; 一、uni-app 组成和跨端原理 二、uni-app 各端差异注意事项 三、uni-app 离线本地存储方案 四、uni-app UI库、框架、组件选型指南 五、uni-app 蓝牙开发 六、uni-app …

【1224】数据结构(sizeof/数组的长度定义/读取字符串函数/线性表长度/左值右值/静态变量/指针与引用)

1.对一维整型数组a的正确说明是 #define SIZE 10 (换行) int a[SIZE];说法是否正确&#xff1f; 正确 数组的SIZE可以用宏定义&#xff0c;但不能用变量 2.如有定义&#xff1a;char str[20];&#xff0c;能将从键盘输入的字符串“How are you”保存到 str 数组的语句是&#x…

强化特种作业管理,筑牢安全生产防线

在各类生产经营活动中&#xff0c;特种作业由于其操作的特殊性和高风险性&#xff0c;一直是安全生产管理的重点领域。有效的特种作业管理体系涵盖多个关键方面&#xff0c;从作业人员的资质把控到安全设施的配备维护&#xff0c;再到特种设备的精细管理以及作业流程的严格规范…

(六)循环神经网络_基本的RNN

一、提出背景 前馈神经网络不考虑数据之间的关联性&#xff0c;网络的输出只和当前时刻网络的输入相关。然而&#xff0c;现实问题中存在着很多序列型的数据&#xff08;文本、语音以及视频等&#xff09;。 例如&#xff1a;室外的温度是随着气候的变化而周期性的变化的&…

Dockerfile的用法

Dockerfile的用法 示例 `Dockerfile`使用 `Dockerfile` 创建 Docker 镜像`Dockerfile` 指令详解其他常用指令总结Dockerfile 是一个文本文件,包含了用于创建 Docker 镜像的一系列指令。这些指令描述了镜像的基础、所安装的软件、文件的复制、环境变量的设置以及其他配置。下面…

60.基于SSM的个人网站的设计与实现(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;个人网站是在MySQL中建立数据表保存信息&#xff0c;运用SSMVue框架和Java语言编写。并按照软件设计开发流程进行设计实现充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SSM的网…

B端UI设计规范是什么?

一、B端UI设计规范是什么&#xff1f; B端UI设计规范是一套针对企业级应用界面设计的全面规则和标准&#xff0c;旨在确保产品界面的一致性、可用性和用户体验。 二、B端UI设计规范要素说明 B端UI设计的基本要素包括设计原则、主题、布局、颜色、字体、图标、按钮和控件、交互…

GPT人工智能在医疗文档中的应用

应用场景 用于文档的整理。主要是针对医疗方面的文档整理。病人在打官司或者办理其他业务时&#xff0c;需要把很多文档整理成册并添加目录、编写概要&#xff08;Summary&#xff09;。这些文档有电子版本的&#xff0c;有纸质的扫描件&#xff0c;还有拍照&#xff08;一般是…

unity 打包出来的所有执行文件内容打包成一个exe程序

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用Enigma Virtual Box1.下载安装包&#xff08;根据需要32位还是64位。一般是64位&#xff09;2.改个语言&#xff0c;方便使用&#xff08;改了后重启才…

vtie项目中使用到了TailwindCSS,如何打包成一个单独的CSS文件(优化、压缩)

在不依赖 Vite 或其他构建工具的情况下&#xff0c;使用 TailwindCSS CLI 快速生成独立的 CSS 文件是一种简单高效的方法&#xff0c;适合需要纯样式文件的场景。 这个项目中&#xff0c;使用到了tailwindCss, 需要把里面的样式打包出来&#xff0c;给其他项目用。 使用命令生…

物联网网络中的设备认证方法

论文标题&#xff1a;DEVICE AUTHENTICATION METHOD IN INTERNET OF THINGS NETWORKS&#xff08;物联网网络中的设备认证方法&#xff09; 作者信息&#xff1a; A.Ya. Davletova&#xff0c;West Ukrainian National University, 11, Lvivska Str. Ternopil, 46009, Ukraine…

重温设计模式--迭代器模式

文章目录 迭代器模式&#xff08;Iterator Pattern&#xff09;概述迭代器模式的结构迭代器模式UML图C 代码示例应用场景 迭代器模式&#xff08;Iterator Pattern&#xff09;概述 定义&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问一个…

大数据机器学习算法和计算机视觉应用07:机器学习

Machine Learning Goal of Machine LearningLinear ClassificationSolutionNumerical output example: linear regressionStochastic Gradient DescentMatrix Acceleration Goal of Machine Learning 机器学习的目标 假设现在有一组数据 x i , y i {x_i,y_i} xi​,yi​&…

华院计算参与项目再次被《新闻联播》报道

12月17日&#xff0c;央视《新闻联播》播出我国推进乡村振兴取得积极进展。其中&#xff0c;华院计算参与的江西省防止返贫监测帮扶大数据系统被报道&#xff0c;该系统实现了由原来的“人找人”向“数据找人”的转变&#xff0c;有效提升监测帮扶及时性和有效性&#xff0c;守…

【视觉惯性SLAM:相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容&#xff0c;它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型&#xff0c;以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…