Linux下文件I/O操作

读取 time.txt 文件,写入到time_2.txt

一、函数

1.1、open() 函数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
第二个open是第一个open和creat的结合版:
函数功能:打开文件
函数参数1:被打开文件的路径
函数参数2:以什么样的形式打开文件必须包含如下的其中一个O_RDONLY : 以只读的形式打开该文件O_WRONLY : 以只写的形式打开该文件O_RDWR : 以读写的形式打开该文件
------------------------------------------------------------------------------------------------------------
如果需要别的权限,要使用 | 形式拼装 a O_WRONLY | O_CREAT | O_APPENDO_EXCL:如果文件已经存在,则打开操作失败。通常与 O_CREAT 一起使用,用于确保创建新文件而不覆盖已存在的文件。O_CREAT:如果文件不存在,则创建文件。如果文件已存在,它不会被截断,而只是打开。O_TRUNC:如果文件已经存在,将文件长度清为0。这将删除文件的现有内容。O_APPEND:将文件指针设置到文件末尾,以便所有写入操作都追加到文件末尾,而不是覆盖现有内容。O_NONBLOCK:以非阻塞模式打开文件。在非阻塞模式下,读取和写入操作将不会被阻塞,即使没有可用的数据或空间。O_NDELAY同O_NONBLOCKO_SYNC:要求所有I/O操作是同步的,即写入操作完成后,才返回。这可以确保数据写入到磁盘而不是缓存在内存中。O_DIRECTORY:要求打开的是一个目录而不是文件。用于确保只能打开目录。O_NOFOLLOW:如果 pathname 是一个符号链接,则打开操作失败。用于防止解引用符号链接。O_DIRECT:要求绕过内核缓存,直接在应用程序和存储设备之间进行数据传输。通常用于低级I/O操作和性能优化。O_TMPFILE:创建一个临时文件,该文件在关闭后会自动删除。适用于需要临时文件的场景。O_NOCTTY如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机
函数参数3:创建文件的权限 权限用二进制表示
函数返回值:成功返回文件描述符,失败返回-1(有可能会设置errno)

1.2、close() 函数

#include <unistd.h> 
int close(int fd);
参数:fd:文件描述符,需要关闭的文件。
返回值:返回 0 表示成功关闭文件,返回 -1 表示失败,并设置 errno 来指示错误原因。常见用法:用于关闭一个已经打开的文件。

1.3、read() 函数

#include <unistd.h> 
ssize_t read(int fd, void *buf, size_t count);
参数:fd:文件描述符。buf:用于存放读取数据的缓冲区。count:要读取的字节数。
返回值:返回实际读取的字节数,如果到达文件末尾返回 0,出错返回 -1,并设置 errno 来指示错误原因。常见用法:用于从文件中读取数据。

1.4、write() 函数

#include <unistd.h> 
ssize_t write(int fd, const void *buf, size_t count);参数:fd:文件描述符。
buf:要写入的数据。
count:要写入的字节数。
返回值:返回实际写入的字节数,出错返回 -1,并设置 errno 来指示错误原因。常见用法:用于向文件中写入数据。

二、源码

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>/*** 主函数:实现从源文件到目标文件的内容复制* @param argc 命令行参数的数量* @param argv 命令行参数的字符串数组* @return 程序退出状态*/
int main(int argc, const char *argv[])
{int fr = 0, fw = 0, ret = 0;char buf[100] = {0};/* 检查命令行参数数量是否足够 */if(argc < 3){printf("usage: %s <src> <dst>\n", argv[0]);return -1;}/* 打开源文件,只读模式 */fr = open(argv[1], O_RDONLY);/* 打开目标文件,写入模式,如果不存在则创建,存在则清空内容 */fw = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);/* 检查源文件打开是否成功 */if(-1 == fr){perror("open fr");return -1;}/* 检查目标文件打开是否成功 */if( -1 == fw){perror("open fw");return -1;}/* 循环读取源文件内容,并写入目标文件,直到读取结束 */while(1){memset(buf, 0 ,sizeof(buf));ret = read(fr, buf, sizeof(buf));/* 检查读取操作是否成功 */if(-1 == ret){perror("read");return -1;}else if(0 == ret){/* 读取结束,退出循环 */printf("read end\n");break;}/* 写入目标文件 */write(fw, buf, 100);}/* 关闭源文件 */close(fr);/* 关闭目标文件 */close(fw);return 0;
}

三、结果展示

四、源码下载

链接:https://pan.baidu.com/s/1zGmHaum63E3pXIzLgOdUIg 
提取码:njqp

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

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

相关文章

RDMA 高性能架构基本原理与设计方案

在进行本文的学习学习之前&#xff0c;我们先对RDMA是什么做一个简单的科普与认识&#xff1a;一文带你了解什么是RDMA-CSDN博客 目录&#xff1a; 目录&#xff1a; 一、RDMA和传统网络方案的比较 1.1 传统网络方案&#xff1a; 1.1.1 缺点一&#xff1a;以太网卡&#xff0…

debian 更新源

前言 实现一键替换在线源 一键更新源 Debian 全球镜像站以下支持现有debian 11 12 echo "Delete the default source" rm -rf /etc/apt/sources.listecho "Build a new source" cat <<EOF>>/etc/apt/sources.list.d/debian.sources Types:…

Tensorflow入门实战 T09进行猫狗识别2

目录 1、前言 2、代码 3、运行结果 4、反思 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 1、前言 本周学习内容为&#xff0c;采用自己设置的vgg-16网络进行猫狗识别&#xff0c;使用的模型是YO…

NC65 设置下拉列表框值

NC65 设置下拉列表框值&#xff0c;如人员任职信息的异动事件&#xff1a; // 只有在入职登记时&#xff0c;才为异动事件下拉框过滤掉【离职】和【离职后变动】两个item DefaultConstEnum[] enumItems initTransevent(); BillItem item getBillCardPanel().getHeadItem(Psn…

自动驾驶三维车道线检测系列—LATR: 3D Lane Detection from Monocular Images with Transformer

文章目录 1. 概述2. 背景介绍3. 方法3.1 整体结构3.2 车道感知查询生成器3.3 动态3D地面位置嵌入3.4 预测头和损失 4. 实验评测4.1 数据集和评估指标4.2 实验设置4.3 主要结果 5. 讨论和总结 1. 概述 3D 车道线检测是自动驾驶中的一个基础但具有挑战性的任务。最近的进展主要依…

POST请求查询参数神奇失效的一次神奇bug之旅

出现场景&#xff1a; 某日我看着GET请求的参数逐渐变多&#xff0c;想个改成POST请求得了&#xff0c;这样body传参美观又方便&#xff0c;于是接口从GET变成了POST&#xff0c;然后查询参数就莫名其妙的就全部失效了&#xff0c;接口也没有报错&#xff0c;就参数失效了&…

vscode搭建PyQt + Quick开发环境

VScode搭建PyQt Quick开发环境 目录 环境准备 &#x1f514;安装必要的Python包 &#x1f514;&#x1f50e; PyQt5和PySide2的区别&#x1f4be; 安装PyQt5&#x1f4be; 安装PySide2 配置VScode &#x1f514;&#x1f4bb; 安装扩展 代码示例 &#x1f514;✔ Python调用Qt…

【Django】django自带后台管理系统样式错乱,uwsgi启动css格式消失的问题

正常情况&#xff1a; ERROR&#xff1a;&#xff08;css、js文件加载失败&#xff09; 问题&#xff1a;CSS加载的样式没有了&#xff0c;原因&#xff1a;使用了django自带的admin&#xff0c;在使用 python manage.py runserver启动 的时候&#xff0c;可以加载到admin的文…

如何学习Spark:糙快猛的大数据之旅

作为一名大数据开发者,我深知学习Spark的重要性。今天,我想和大家分享一下我的Spark学习心得,希望能够帮助到正在学习或准备学习Spark的朋友们。 目录 Spark是什么?学习Spark的"糙快猛"之道1. 不要追求完美,在实践中学习2. 利用大模型作为24小时助教3. 根据自己的节…

golang实现的ab测试http代理工具

压测工具ab不能统计http请求的错误情况&#xff0c;包括http状态码错误和响应正文的错误关键字。 所以加层代理用于统计http错误情况&#xff0c;重在统计错误情况&#xff0c;而不是代理的性能&#xff0c;主要用于功能接口的测试&#xff0c;比如测试一下请求多少次接口会返…

无人机的发展前景大吗?

随着科技的飞速发展&#xff0c;无人机&#xff08;Unmanned Aerial Vehicle, UAV&#xff09;作为一种新兴的航空器&#xff0c;已逐渐从军事领域渗透到民用领域。无人机的应用广泛&#xff0c;包括但不限于航拍、物流配送、环境监测、农业植保、应急救援等多个领域。本文旨在…

pip如何获取项目有关的所有whl文件并批量进行安装

获取项目所需 whl 导出项目的依赖列表&#xff1a; 首先&#xff0c;需要导出项目所需的依赖列表。可以使用 pip 的 freeze 命令来实现这一点。 pip freeze > requirements.txt这会将当前环境中所有已安装的包及其版本信息导出到 requirements.txt 文件中。 下载 .whl 文件…

Chromium CI/CD 之Jenkins实用指南2024-在Windows节点上创建任务(九)

1. 引言 在现代软件开发流程中&#xff0c;持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;已成为确保代码质量和加速发布周期的关键实践。Jenkins作为一款广泛应用的开源自动化服务器&#xff0c;通过其强大的插件生态系统和灵活的配置选项&#xf…

十七、【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

opencv 使用XML和YAML格式来输入输出文件

源码 链接 link #include <opencv2/core.hpp> #include <iostream> #include <string>using namespace cv; using namespace std;// 帮助信息函数 static void help(char** av) {cout << endl<< av[0] << " shows the usage of the…

Java 新手学习线路,Java 学习路线是怎样的?

学习Java是一条漫长但有趣的道路。作为一门面向对象编程语言&#xff0c;Java不仅在企业级开发中占据重要地位&#xff0c;还在移动开发、大数据、人工智能等领域有着广泛应用。下面&#xff0c;我将从基础到高级&#xff0c;详细介绍Java学习线路图&#xff0c;帮助新手一步步…

静态代理与动态代理的区别与选择

在当今软件开发领域&#xff0c;代理模式作为一种重要的设计模式&#xff0c;广泛应用于增强现有对象功能、控制访问权限以及实现远程调用等场景。本文旨在深入探讨静态代理与动态代理之间的核心区别&#xff0c;帮助开发者理解两者在实现机制、灵活性、性能表现及适用场景上的…

Filebeat k8s 部署(Deployment)采集 PVC 日志发送至 Kafka——日志处理(二)

文章目录 前言Filebeat Configmap 配置Filebeat Deployment验证总结 前言 在上篇文章中总结了 Django 日志控制台输出、文件写入按天拆分文件&#xff0c;自定义 Filter 增加 trace_id 以及过滤——日志处理&#xff08;一)&#xff0c;将日志以 JSON 格式写入日志文件。我们的…

无人机侦察:二维机扫雷达探测设备技术详解

二维机扫雷达探测设备采用机械扫描方式&#xff0c;通过天线在水平方向和垂直方向上的转动&#xff0c;实现对目标空域的全方位扫描。雷达发射机发射电磁波信号&#xff0c;遇到目标后产生反射&#xff0c;反射信号被雷达接收机接收并处理&#xff0c;进而得到目标的位置、速度…

调用第三方接口-RestTemplate

调用方式 POST请求单个新增批量新增 GET请求1.含PathVariable2.查询列表 POST请求 单个新增 例如后端接口接收参数为 User user 使用RestTemplate发送post请求&#xff0c;暂未进行异常处理 //封装body信息 JsonObject jsonObject new JsonObject(); jsonObject.put("…