Linux系统编程——文件的光标移动

news2024/10/7 4:35:40

光标移动(lseek)

主要用于不断对文件写入数据或读取数据的的用法,每次写入数据后光标在数据尾,若要进行读取则只会没法读取到光标前的数据,这个时候就不需要重启文件,只需对光标位置做出调整就可以读取数据

使用lseek函数需要包含以下两个头文件

#include <sys/types.h>
#include <unistd.h>

lseek的函数定义格式

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

函数定义的参数解读

int fd:fd为创建文件的文件描述符

off_t offset:对于下一个参数whence的偏移值,负值向左移动,正值向右移动,0从当前开始

int whence:光标出现位置,分别有以下几种:

SEEK_SET文件头
SEEK_CUR文件当前位置
SEEK_END文件尾

示例如下:

lseek(fd,0,SEEK_SET);//光标移动到文件头
lseek(fd,0,SEEK_CUR);//光标保留当前位置
lseek(fd,0,SEEK_END);//光标移动到文件尾

lseek(fd,1,SEEK_SET);//光标相对于文件头向右移动1个字节
lseek(fd,1,SEEK_CUR);//光标相对当前位置向右移动1个字节
lseek(fd,-1,SEEK_END);//光标相对于文件尾向左移动1个字节

函数返回值

移动成功后该函数的返回值是光标针对于文件头移动的字节数,可以利用该函数计算文件字节大小

示例如下:

int file1_size = lseek(fd_file1,0,SEEK_END);//光标移动到文件尾并将移动字节数返回
printf("write file1 size = %d\n",file1_size);

代码展示(对上节做出调整)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	int fd;
	char *buf = "Hello Word";

	fd = open("./file1",O_RDWR);//文件删除,文件描述符返回值为-1
	
	if(fd == -1)
	{
		printf("open file1 failed\n");
		fd = open("./file1",O_RDWR|O_CREAT,0600);//重新建立一个file1,此时文件描述符返回值大于0
		if(fd > 0)
		{
			printf("creat file1 success\n");
		}
	}
	printf("open success:fd = %d\n",fd);

	int n_write = write(fd,buf,strlen(buf));//定义一个整型变量存放write返回的文件描述符的值(写入字节个数)
	if(n_write != -1)
	{
		printf("write %d byte to file1\n",n_write);
	}
	
    lseek(fd,0,SEEK_SET);//将光标移动到文件头
//	lseek(fd,-n_write,SEEK_CUR);//光标相对于当前位置移动向左移动写入字节个数


 	char *readBuf;
	readBuf = (char *)malloc(sizeof(char)*n_write+1);//对指针进行开辟内存空间,其读取的字节数为写入的字节数,其大小为char型,可用写入字节个数乘以char的值即为读取个数,此时存放的是字符串
	int n_read = read(fd,readBuf,n_write);//定义一个整型变量存放read返回的文件描述符的值(读取字节个数)
	printf("read byte is %d,context is %s\n",n_read,readBuf);
	close(fd);

	return 0;
}

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

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

相关文章

抢抓泛娱乐社交出海新风口!Flat Ads深圳沙龙活动引爆海外市场

随着全球化进程的加速&#xff0c;中国的应用类APP不断走向国际市场。作为产品和服务的提供者&#xff0c;中国开发者围绕社交泛娱乐创新&#xff0c;开启直播出海、短视频出海、游戏社交出海、1V1 视频出海、音频社交出海等出海热潮。“社交、泛娱乐”融合成为行业主流发展趋势…

Three.js 实现简单的PCD加载器(可从本地读取pcd文件)【附完整代码】

1 功能实现 初始会显示我们之前 SfM 做出的点云&#xff0c;包括相机位置可以点击右上角加载你本地的PCD文件可以通过选择多个文件加载多个点云并显示在同一场景中可以通过左上角的控制界面查看/调整点云的属性&#xff0c;如点大小、颜色等可以通过右上角的控制界面选择旋转 …

Android T 实现简易的 USB Mode Select 需求

Android T 实现 USB Mode Select 需求 一、实现效果 二、主要实现思路 在手机连接 USB 发生/取消通知的同时&#xff0c;控制弹窗 Dialog 的显示/消失。 三、主要代码实现 连接 USB 发送/取消的主要实现是在 UsbDeviceManager.java 类中。类路径如下&#xff1a; system/f…

公司批量寄件教程

公司批量寄快递如何实现&#xff1f;相信不少企业行政人员、财务人员等都有类似的困扰。 很简单&#xff0c;随着经济和快递行业的发展&#xff0c;因公寄件在企业中已经是件常事了&#xff0c;其中不乏有批量寄件的时候。比如说财务批量寄递发票、行政批量寄递节日慰问品、业…

工作利器!熟悉这几款数据流图工具,事半功倍!

数据流图工具在现代工作中起到了非常重要的作用。无论是在企业内部的流程优化&#xff0c;还是在软件开发、项目管理、系统设计等领域&#xff0c;数据流图工具都扮演着关键的角色。本文将为大家介绍8款高效的数据流图工具&#xff0c;帮助大家选择适合自己工作需求的工具。 1.…

工作四年,关于过滤敏感词,我准备这样干

文章目录 &#x1f4c6; 业务场景&#x1f5a5;️业务梳理&#x1f4cc;小技巧 &#x1f4c7;完整代码&#x1f58a;️最后总结胖奥特曼悠闲躺着 &#x1f4c6; 业务场景 提交订单评价时需要对评价内容进行判断&#xff0c;如果出现敏感词则提示修改 &#x1f50a;这不就是写一…

WorkPlus定制化的沟通协作平台,助您实现企业级完全掌控

在企业沟通协作的领域&#xff0c;一种高度定制化的平台是至关重要的。WorkPlus作为一款领先的沟通协作平台&#xff0c;具备高度定制化的特点&#xff0c;能够满足企业各项需求。通过平台级定制扩展和上下游完全掌控&#xff0c;WorkPlus成为了企业实现定制化和完全掌控的理想…

关于近期360自动屏保导致的问题

本身是一个好产品 但是对于某些应用就有点画蛇添足了 1、导致K3无法使用 K3中间层需要用户持续登入系统 2、导致系统停止工作 3、停止网络 4、占用系统资源 5、占用网络资源 6、占用硬件资源 。。。。。。 对于24小时开机的用户影响巨大 对于局域网信息点多的网络影响巨…

2011年09月01日 Go生态洞察:Go语言词法扫描与App Engine演示

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

全方位解析跨境电商系统源码,开启全球贸易新篇章

随着全球电商市场的快速发展&#xff0c;跨境电商已经成为越来越多企业的必然选择。在这个过程中&#xff0c;跨境电商系统源码的重要性不言而喻。本文将全方位解析跨境电商系统源码&#xff0c;帮助您更好地了解其核心构成、功能特点以及开发流程。 一、跨境电商系统源码的核心…

重温数据结构与算法之前缀和

文章目录 前言一、基础1.1 定义1.2 时间复杂度 二、扩展2.1 二维前缀和2.2 差分数组2.3 前缀积 三、LeetCode 实战3.1 长度最小的子数组3.2 二维区域和检索 - 矩阵不可变 参考 前言 前缀和&#xff08;Prefix Sum&#xff09;&#xff0c;也被称为累计和&#xff0c;是一种在计…

【EI会议征稿】第三届新能源技术创新与低碳发展国际研讨会(NET-LC 2024)

第三届新能源技术创新与低碳发展国际研讨会&#xff08;NET-LC 2024&#xff09; 2024 3rd International Symposium on New Energy Technology Innovation and Low Carbon Development 先进的现代能源技术对世界各地的经济发展至关重要。持续的经济进步取决于安全、可靠和负担…

idea2023如何查看被使用上下文关系

1.接口查看实现类&#xff0c;实现类查看接口 查看接口所有实现类 根据类里面的方法查看被覆盖的接口中的方法 2.查看方法、类被调用 3.查看类的继承关系

ChatGPT的图识别来了

前几天ChatGPT推出了Dall-E 3功能&#xff0c;可以根据文字和描述一段话来生成一个或者一组图。 这次又来重磅了&#xff0c;图识别又来了&#xff01;换句话说&#xff0c;也即是文生图&#xff0c;图生文都可以实现了&#xff0c;一起来试试 1、解释图中的意思 &#xff0…

粤嵌实训医疗项目--day06(Vue + SpringBoot)

往期回顾 粤嵌实训医疗项目(小组开发)--day05-CSDN博客粤嵌实训医疗项目--day04&#xff08;Vue SpringBoot&#xff09;-CSDN博客粤嵌实训医疗项目--day03&#xff08;Vue SpringBoot&#xff09;-CSDN博客粤嵌实训医疗项目day02&#xff08;Vue SpringBoot&#xff09;-CS…

Python 测试框架 Pytest 的入门

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;加入1000人软件测试技术学习交流群&#x1f4e2;资源分享&#xff1a;进了字节跳动之后&#xff0c;才…

【算法练习Day44】最长递增子序列最长连续递增序列最长重复子数组

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 最长递增子序列最长连续递增…

线程池创建、执行、销毁的原理解析

目录 线程池的执行原理线程执行参考&#xff1a; 线程池的执行原理 假设最大核心数是2&#xff0c;非核心线程数为1&#xff0c;队列长度是3 来第一个任务的时候&#xff0c;没有工作线程在工作&#xff0c;需要创建一个 来第二个任务的时候&#xff0c;发现当前核心线程数…

C语言 UTF-8与GBK编码互转,一个头文件搞定!不使用第三方库,纯C语言跨平台

背景&#xff1a; 项目需要在mips32架构的freertos系统上将输入的汉字、标点符号、数字、字母等转成机内码输出&#xff0c;第一个想到的办法是移植第三方库进行编码转换&#xff0c;网上搜了一圈libiconv、ICU库都可以实现&#xff0c;但是在我的项目上移植编译各种报错、非常…

【漏洞复现】jumpserver任意密码重置

jumpserver任意密码重置漏洞-CVE-2023-42820 jumpserver jumpserver是FIT2CLOUD飞致云旗下的开源堡垒机。 环境搭建 这里用的是vulhub靶场 进入 jumpserver 的目录 修改配置文件 config.env 里面的 DOMAINS 参数为kali的地址 运行环境&#xff0c;第一次运行的话会拉取文件…