Linux系统编程——文件的写入及读取

news2025/1/15 20:51:31

写入(write)

使用write函数需要包含以下头文件:

#include <unistd.h>

write的函数定义格式

ssize_t write(int fd, const void *buf, size_t count);

附加:一般将数据写入文件中后需关闭文件,这里需要调用关闭(close)函数,其包含的头文件与写入函数一样,函数定义格式也比较简洁,如下:

int close(int fd);

参数解读:调用该函数时,只需将需要关闭文件的文件描述符fd传进来即可实现关闭

函数定义的参数解读

int fd:fd为创建文件的文件描述符
const void *buf:这里为无类型的指针,通常对他进行强转成字符串:buf为要写入的字节
size_f count:写入字节的长度

整体流程:从定义的buf中写入count个字节并传到文件描述符fd对应的文件

函数返回值

写入成功后会返回写入字节的个数(整型数);写入失败会返回-1

代码示例

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

int main()
{
	int fd;
	char *buf = "Hello Word";//将无类型指针强制转换并输入字节
	fd = open("./file1",O_RDWR);
	
	if(fd == -1)
	{
		printf("open file1 failed\n");
		fd = open("./file1",O_RDWR|O_CREAT,0600);
		if(fd > 0)
		{
			printf("creat file1 success\n");
		}
	}
	printf("open success:fd = %d\n",fd);
	write(fd,buf,strlen(buf));
	close(fd);
	return 0;
}

注意:这里计算字符串长度最好用strlen,它能计算出字符串的有效长度,而这里的buf是char型指针,如果用sizeof只能计算出char型在系统中的长度(8个字节),若输入的字符串超过8位,那么使用sizeof只能输入前8位。

读取(read)

使用读取函数时需包含以下头文件

#include <unistd.h>

read的函数定义格式

ssize_t read(int fd, void *buf, size_t count);

函数定义的参数解读

int fd:fd为创建文件的文件描述符
const void *buf:这里为无类型的指针,通常对他进行强转成字符串:buf为要读取的字节
size_f count:读取字节的长度

整体流程:从文件描述符fd读取count个字节的数据传到buf的缓冲区中

函数返回值

读取成功后会返回读取字节的个数(整型数);读取失败会返回-1

代码示例

#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);
	}
	close(fd);//由于光标问题,写完之后光标在最后面 此时read从光标位置开始读取,并不会读取写入文件中的字符串,需关闭文件并重新打开
	fd = open("./file1",O_RDWR);

 	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/1192200.html

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

相关文章

Kibana使用Watcher监控服务日志并发送飞书报警(Markdown)

Watcher是什么 Kibana Watcher 是 Elasticsearch 的监控和告警工具&#xff0c;它允许你设置和管理告警规则以监控 Elasticsearch 数据和集群的状态。Kibana Watcher 可以监测各种指标和数据&#xff0c;然后在满足特定条件时触发警报。它提供了一种强大的方式来实时监控 Elas…

频谱分析仪 如何选择 TFN RMT系列给您答案

TFN RMT手持式频谱分析仪是TFN新推出的一款高性能、全功能版测试仪&#xff0c;集高性能信号分析模块、多制式解析算法软件于一体的手持式测试仪表&#xff0c;满足军工、高校科研、通信运营商、电力、铁路等对移动通信的测试、无线排查干扰等应用而全新推出的平台&#xff0c;…

地区 IP 库

地区 & IP 库 yudao-spring-boot-starter-biz-ip (opens new window)业务组件&#xff0c;提供地区 & IP 库的封装。 #1. 地区 AreaUtils (opens new window)是地区工具类&#xff0c;可以查询中国的省、市、区县&#xff0c;也可以查询国外的国家。 它的数据来自 …

电脑恢复出厂设置在哪里?我来告诉你

在电脑使用中&#xff0c;有时候出现了一些问题&#xff0c;比如系统崩溃、性能下降、病毒感染或者想要将电脑彻底清空以出售或赠予他人。这时&#xff0c;恢复出厂设置成为一个有效的解决方案。可是恢复出厂设置在哪里呢&#xff1f;本文将介绍三种不同的方法来恢复电脑出厂设…

FCOS难点记录

FCOS 中有计算 特征图&#xff08;Feature map中的每个特征点到gt_box的左、上、右、下的距离&#xff09; 1、特征点到gt_box框的 左、上、右、下距离计算 x coords[:, 0] # h*w&#xff0c;2 即 第一列y coords[:, 1] l_off x[None, :, None] - gt_boxes[..., 0][:, No…

禅道研发项⽬管理系统未授权RCE漏洞复现

1、产品介绍 Zendao禅道是第一款国产的开源项目管理软件&#xff0c;他的核心管理思想基于敏捷方法scrum&#xff0c;内置了产品管理和项目管理&#xff0c;同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能。 2、漏洞描述 该系统在202…

opencv创建图片,绘制图片,画框,划线,改变像素点颜色

文章目录 创建空白图片创建一张渐变色彩色绘制多边形绘制多线改变像素点颜色 创建空白图片 bool tool_class::creatEmpty(int width, int height, std::string image_p) {// 创建一个空白图像cv::Mat blankImage(height, width, CV_8UC3, cv::Scalar(255, 255, 255));// 保存图…

html与django实现多级数据联动

html与django实现多级数据联动 1、流程 1、进入页面后先获取年级数据 2、选择年级后获取院级数据 3、选择院级后获取层次数据 4、选择层次数据后获取专业数据 2、html代码 <p style"margin-top: 10px;"><label>年级</label><select id"…

MCU平台使用SPI-DirectC实现FPGA在线升级

本文介绍在MCU平台上使用SPI-DirectC实现FPGA的在线升级功能。 对于使用Microchip FPGA若想使用离线方式对FPGA进行Bitstream的烧写,就不得不使用官方提供的DirectC组件(开源,包含JTAG-DirectC和SPI-DirectC),本文是在MCU(32bit)上实现的,采用的是SPI-DirectC组件。 …

工业自动化与5G技术的融合:开启工业4.0时代的新篇章

工业自动化与5G技术的融合&#xff1a;开启工业4.0时代的新篇章 随着全球数字化进程的加速推进&#xff0c;工业自动化作为现代制造业的核心驱动力&#xff0c;正经历着前所未有的变革。而在这一变革中&#xff0c;5G技术的崛起为工业自动化带来了全新的可能性和机遇。本文将探…

商人宝:网页收银软件有哪些功能

网页收银软件凭借无需安装、无需手工升级以及良好的用户体验等优势迅速发展并替代传统收银软件&#xff0c;今天商人宝为大家分享网页收银软件一般有哪些功能。欢迎大家点赞关注&#xff0c;以及收藏本文章&#xff0c;以便后续多看多了解。 1、快速收银 通过扫码枪快速将商品加…

到蒙古包了,这边天气-9度 很冷

【点我-这里送书】 本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》 公众号&#xff1a;JAVA开发王大师&#xff0c;专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生&#xff0c;期待你的…

Android笔记(十二):结合Compose实现Handler机制处理多线程的通信

在Android应用中常常结合多线程处理多个任务。不可避免&#xff0c;多个线程之间需要数据通信。Hanlder消息处理机制是异步处理的方式之一。通过Handler机制可以实现在不同的线程之间的通信。 一、主线程和工作线程 1.主线程 一个Android的移动应用启动时会单独启动一个进程…

虚幻C++基础 day4

虚幻中的UI 虚幻中的比较常用的UI&#xff1a;Widget Blueprint又称UMG虚幻中的两种布局&#xff1a; 网格布局锚布局 创建Widget Blueprint 网格布局 有点类似Qt中的网格布局&#xff0c;将UI面板进行行列切分Horizontal Box&#xff1a;水平分布Vertical Box&#xff1a;…

【C++】——类与对象(二)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

微信号绑定50个开发者小程序以后超额如何删除不用的

我们在开发微信小程序的时候&#xff0c;当前开发者工具登录的必须是该小程序的开发者才能进行小程序的开发&#xff0c;添加开发者的步骤是&#xff1a; 添加开发者 1、进入微信开放平台&#xff0c;然后扫码进入管理平台 2、找到下图所示位置 3:、输入要添加的微信账号&am…

python调用chrome实现网页自动操作

一. 内容简介 python调用chrome实现网页自动操作。 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 链接&#xff1a; 三.主要流程 3.1 下载驱动和插件 调用谷歌浏览器&#xff0c;需要下载浏览器驱动&#xff08;https://registry.npmmirror.co…

fastadmin 表单页面,根据一个字段的值显示不同字段

表单中有计费方式&#xff0c;选中不同的计费方式显示不同的字段如下图 根据选择不同的计费方式&#xff1a;重量或夹板。展示不同相关字段&#xff1a;每件重量/每夹板件数量 add.html <div class"form-group"><label class"control-label col-xs-12…

redisson中的分布式锁二

公平锁&#xff08;Fair Lock&#xff09; 基于Redis的Redisson分布式可重入公平锁也是实现了java.util.concurrent.locks.Lock接口的一种RLock对象。同时还提供了异步&#xff08;Async&#xff09;、反射式&#xff08;Reactive&#xff09;和RxJava2标准的接口。它保证了当…

C#开发的OpenRA游戏之世界存在的属性CombatDebugOverlay(3)

C#开发的OpenRA游戏之世界存在的属性CombatDebugOverlay(3) 这次来分析CombatDebugOverlay属性,这个属性只有在调试游戏的时候才会使用。当你设置这个属性的时候,就可以看到如下图的结果: 可以看到物品的周边都有一个圆圈,以及有一些十字的点位标志。 那些十字表示的点…