当前位置: 首页 > news >正文

从Linux系统的角度看待文件-基础IO

目录

从Linux系统的角度看待文件

系统文件I/O

open

write

read 

文件操作的本质

vim中批量注释的方法


从Linux系统的角度看待文件

关于文件的共识:

1.空文件也要占用磁盘空间

2.文件=内容+属性

3.文件操作包括文件内容/文件属性/文件内容+属性

4.文件路径+文件名具有唯一性

5.如果没有指明对应的文件路径,默认是在当前路径下对文件进行访问

故:文件操作的本质为:进程和被打开文件的关系

文件权限=0 666&~umask(默认文件掩码)

系统文件I/O

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);pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写
返回值:成功:新打开的文件描述符失败:-1

write

  #include <unistd.h>ssize_t write(int fd, const void *buf, size_t count);

 c语言字符串以'\0'为结尾,与文件无关

//r   w   r+(读写,不存在则报错)   w+(读写,不存在则创建)//FILE* fp=fopen(FINE_NAME,"");int fd=open(FINE_NAME,O_WRONLY|O_CREAT,0666);if(fd<0){perror("open");return 1;}int cnt =5 ;char outBuffer[64];while (cnt){sprintf(outBuffer,"%s:%d\n","test",cnt--);write(fd,outBuffer,strlen(outBuffer));//strlen 不能+1 算上'\0' 会出现乱码}//printf("fd: %d\n",fd);close(fd);

int fd=open(FINE_NAME,O_WRONLY|O_CREAT|O_TRUNC,0666);

 O_TRUNC:对文件内容做清空

read 

SYNOPSIS#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);
char buffer[1024];ssize_t num = read(fd,buffer,sizeof(buffer)-1);if(num>0) buffer[num]=0;printf("%s",buffer);

文件操作的本质

文件操作的本质为:进程和被打开文件的关系

进程可以打开多个文件-> 系统中存在大量的被打开的文件

OS管理被打开文件的方式是为其创建对应的内核数据结构(struct file)标识文件

struct file:中包含了文件的大部分属性。

#define FINE_NAME(number) "log.txt"#number

#:的作用是为了将log.txt与number拼接起来

int fd1 = open(FINE_NAME(1), O_WRONLY | O_CREAT | O_TRUNC, 0666);int fd2 = open(FINE_NAME(2), O_WRONLY | O_CREAT | O_TRUNC, 0666);int fd3 = open(FINE_NAME(3), O_WRONLY | O_CREAT | O_TRUNC, 0666);int fd4 = open(FINE_NAME(4), O_WRONLY | O_CREAT | O_TRUNC, 0666);int fd5 = open(FINE_NAME(5), O_WRONLY | O_CREAT | O_TRUNC, 0666);
printf("fd: %d\n", fd1);printf("fd: %d\n", fd2);printf("fd: %d\n", fd3);printf("fd: %d\n", fd4);printf("fd: %d\n", fd5);close(fd1);close(fd2);close(fd3);close(fd4);close(fd5);

SYNOPSIS#include <stdio.h>extern FILE *stdin;extern FILE *stdout;extern FILE *stderr;
FILE* fp...;

FILE是一个结构体,其中有一个字段是文件描述符。

文件描述符的本质就是数组下标。

vim中批量注释的方法

ctrl+v+j+I+//+Esc

u:取消

fgets:在读取完字符串后会给字符串添加'\0'

int main()
{//r   w   r+(读写,不存在则报错)   w+(读写,不存在则创建)FILE* fp=fopen(FINE_NAME,"");return 0;
}

c语言中以w的形式打开文件,c会自动清空其内部的内容。

相关文章:

从Linux系统的角度看待文件-基础IO

目录 从Linux系统的角度看待文件 系统文件I/O open write read 文件操作的本质 vim中批量注释的方法 从Linux系统的角度看待文件 关于文件的共识&#xff1a; 1.空文件也要占用磁盘空间 2.文件内容属性 3.文件操作包括文件内容/文件属性/文件内容属性 4.文件路径文…...

总结之Coze 是一站式 AI Bot 开发平台——工作流使用及coze总结(三)

工作流介绍 工作流支持通过可视化的方式&#xff0c;对插件、大语言模型、代码块等功能进行组合&#xff0c;从而实现复杂、稳定的业务流程编排&#xff0c;例如旅行规划、报告分析等。 当目标任务场景包含较多的步骤&#xff0c;且对输出结果的准确性、格式有严格要求时&…...

汽车线束之故障诊断方案-TDR测试

当前&#xff0c;在汽车布局中的线束的性能要求越来越高。无法通过简单的通断测试就能满足性能传输要求。早起对智能化要求不高&#xff0c;比如没有激动雷达、高清摄像、中央CPU等。 近几年的智能驾驶对网络传输要求越来越高&#xff0c;不但是高速率&#xff0c;还需要高稳定…...

自己做个国庆75周年头像生成器

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 下载相关代码&#xff1a;【免费】《自己做个国庆75周年头像生成器》代码资源-CSDN文库 又是一年国庆节&#xff0c;今年使用国旗做…...

2k1000LA loongnix 安装java

问题&#xff1a; 客户 需要在 loongnix 上 使用 java 的程序。 情况说明&#xff1a; 使用 apt get 是无法 安装java 的。 按照的资料就行。 首先是 下载 loongarch64 的 java 的压缩包。这个我已经下载下来了。 社区下载地址&#xff1a; http://www.loongnix.cn/zh/api/…...

中信银行西安分行:构建科技金融体质 做好科技金融“大文章”

中央金融工作会议提出&#xff0c;要做好科技金融、绿色金融、普惠金融、养老金融、数字金融五篇大文章。做好新时代金融五篇大文章&#xff0c;不仅为统筹推进经济和金融高质量发展明确了重点&#xff0c;也锚定了着力点。 作为一家拥有红色基因的国有金融企业&#xff0c;中…...

Linux系统性能调优技巧详解

Linux系统性能调优技巧详解 Linux 系统广泛应用于服务器、嵌入式设备以及开发工作站中&#xff0c;因此对其进行性能调优是保障系统高效运行的关键之一。性能调优不仅可以提高系统的响应速度&#xff0c;还能有效优化资源使用&#xff0c;避免瓶颈。在这篇文章中&#xff0c;我…...

MFC工控项目实例之十九手动测试界面输出信号切换

承接专栏《MFC工控项目实例之十八手动测试界面输入信号实时检测》 根据板卡设置界面组合框选项设定的输出信号&#xff0c;通过读取文件中保存的键值&#xff0c;用单选按钮切换输出信号接通、关闭。 1、在Data_1.h文件中添加代码 CString COMB_Data_O_1[]{"夹紧",&…...

数据结构——栈的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》55 ~ 59页 &#x1f308;每一个清晨&#xff0c;都是世界对你说的最温柔的早安&#xff1a;ૢ(≧▽≦)و✨ 1、栈的基本概念 栈&#x…...

Chainlit集成LlamaIndex实现知识库高级检索(组合对象检索)

检索原理 对象组合索引的原理 是利用IndexNode索引节点&#xff0c;将两个不同类型的检索器作为节点对象&#xff0c;使用 SummaryIndex &#xff08;它可以用来构建一个包含多个索引节点的索引结构。这种索引通常用于从多个不同的数据源或索引方法中汇总信息&#xff0c;并能…...

万界星空科技铜拉丝行业MES系统,实现智能化转型

一、铜拉丝行业生产管理的难点主要体现在以下几个方面&#xff1a; 1、标准严格&#xff1a;铜线产品对质量的要求极高&#xff0c;特别是在电气性能、导电性、耐腐蚀性等方面&#xff0c;任何微小的瑕疵都可能影响产品的使用效果和安全性。 2、过程监控&#xff1a;生产过程…...

ECCV 2024 现场:参会者付高价、跨万里,却无法入场?

ECCV&#xff08;European Conference on Computer Vision&#xff0c;欧洲计算机视觉国际会议&#xff09;是计算机视觉领域的重要国际会议之一&#xff0c;与CVPR和ICCV并称为计算机视觉的三大顶级会议。 ECCV2024是该系列会议的第18届会议&#xff0c;2024年9月29日至10月4…...

使用rsync+jenkins实现服务自动部署全流程

项目背景&#xff1a;城市政务云服务器没有上k8s&#xff0c;所有后端服务都是原始方式部署启动 &#xff08;java -jar xxx.jar&#xff09;&#xff0c;那么有没有方式简化部署难度&#xff0c;实现自动部署&#xff1f;当然是有的&#xff0c;下面详细介绍&#xff08;以Cen…...

python 实现decision tree决策树算法

decision tree决策树算法介绍 决策树算法&#xff08;Decision Tree Algorithm&#xff09;是一种基于输入特征对实例进行分类的树结构模型&#xff0c;主要用于分类和回归任务。其基本原理是根据训练数据的特征属性和类别标签之间的关系&#xff0c;生成一个能够对新样本进行…...

前端大模型入门:实战篇之Vue3+Antdv+transformers+本地模型实现增强搜索

本文将之前的文章&#xff0c;实现一个场景的实战应用&#xff0c;包含代码等内容。利用纯前端实现增强的列表搜索&#xff0c;抛弃字符串匹配&#xff0c;目标是使用番茄关键字可以搜索到西红柿 1 准备工作 1.1 了解llm和web开发 web端的ai开发参考 前端大模型入门&#xff…...

《向量数据库指南》——Fivetran 的 Partner SDK:构建自定义连接器和目标

哈哈,说到 Fivetran 的 Partner SDK,这可真是个好东西啊!作为向量数据库领域的“老司机”,我今天就来给大家详细讲讲这个 SDK 的厉害之处,以及如何用它来构建自定义连接器和目标,实现与 Fivetran 自动化数据移动平台的无缝集成。 一、Fivetran Partner SDK:开启自定义连…...

微信小程序的 button 标签的边框如何去除?

目录 问题描述&#xff1a; 问题原因&#xff1a; 解决办法&#xff1a; 方案一 方案二 问题描述&#xff1a; 实际开发中会发现这个 button 自带有样式&#xff0c;当背景颜色设置为白色的时候还有一个黑色的边框&#xff0c;刚开始那个边框怎么都去不掉 无法去除的边框…...

20240926 关于Goland处理wsl-GOROOT原理猜测

GOROOT的原理 go sdk与java jdk类似&#xff0c;是go的编译工具链的集合。 在windows上&#xff0c;我们通过在系统环境变量中添加GOROOT并设置为go sdk地址&#xff0c;使得命令行可以访问到go sdk并执行go test、build等命令&#xff0c;这样设置的变量是全局生效的&#x…...

Anki 学习日记 - 卡片模版 - 单选ABCD(纯操作)

摘要&#xff1a;在不懂前端语言的情况下自定义卡片模版&#xff0c;卡片模版的字段 安装&#xff08;官网&#xff09;&#xff1a;Anki - powerful, intelligent flashcards (ankiweb.net) 一、在哪能修改卡片模版 管理笔记模板 - > 添加 -> 问答题 -> 设置名称 二…...

钉钉x昇腾:用AI一体机撬动企业数字资产智能化

“走红”近两年后&#xff0c;大模型正在加速走进千行万业。 由于大模型的主要模态是文字和图片&#xff0c;恰好是数字化办公最基础的内容要素&#xff0c;办公于是成了离AI最近的场景。 公文写作、表格生成、提炼大纲、文本翻译、代码润色、数据统计、智能问答……越来越多…...

【C/C++】 秋招常考面试题最全总结(让你有一种相见恨晚的感觉)

目录 1.C程序编译链接过程 2.浅拷贝和move有区别吗 3.深拷贝和浅拷贝的区别 4.空类的大小 5.类的继承有几种方式&#xff0c;区别是什么&#xff1f; 六、extern 关键字的作用 七、static关键字的作用 八、指针和引用的区别 九、C内存分配方式 十、结构体对齐…...

CSS面试真题 part1

CSS面试真题 part1 1、说说你对盒子模型的理解2、谈谈你对BFC的理解3、什么是响应式设计&#xff1f;响应式设计的基本原理是什么&#xff1f;如何做&#xff1f;4、元素水平垂直居中的方法有哪些&#xff1f;如果元素不定宽高呢&#xff1f;5、如何实现两栏布局&#xff0c;右…...

针对考研的C语言学习(定制化快速掌握重点5)

顺序表 特点&#xff1a; 写代码主要就是增删改查&#xff01;&#xff01;&#xff01; 写代码的边界性非常重要以及考研插入和删除的位置都是从1开始&#xff0c;而数组下标是从0开始 【注】下标和位置的关系 线性表最重要的是插入和删除会涉及边界问题以及判断是否合法 …...

构建高效房屋租赁系统:Spring Boot应用

1 绪论 1.1 研究背景 中国的科技的不断进步&#xff0c;计算机发展也慢慢的越来越成熟&#xff0c;人们对计算机也是越来越更加的依赖&#xff0c;科研、教育慢慢用于计算机进行管理。从第一台计算机的产生&#xff0c;到现在计算机已经发展到我们无法想象。给我们的生活改变很…...

学习单片机编程和硬件设计步骤

学习单片机编程和硬件设计可以分为几个步骤&#xff1a; 理解基本概念&#xff1a;首先需要了解单片机的基本概念、硬件结构和工作原理 。 选择开发平台&#xff1a;选择一个合适的单片机系列作为起点&#xff0c;如Arduino、ESP8266/ESP32或STM32系列 。 准备工具和环境&…...

.net Framework 4.6 WebAPI 使用Hangfire

C# 使用 Hangfire 第一章 .net Framework 4.6 WebAPI 使用Hangfire 文章目录 C# 使用 Hangfire前言一、hangfire是什么?二、hangfire的特点三、.net Framework 中hangfire的使用方法第一步:创建WebAPI控制器第二步:添加nuget包第三步 创建startup类新建项目startup类Startu…...

两个向量所在平面的法线,外积,叉积,行列式

偶尔在一个数学题里面看到求两向量所在平面的法线&#xff0c;常规方法可以通过法线与两向量垂直这一特点&#xff0c;列两个方程求解&#xff1b;另外一种方法可以通过求解两个向量的叉积&#xff0c;用矩阵行列式 (determinant) 的方式&#xff0c;之前还没见过&#xff0c;在…...

C++之 友元重载 以及最常用的几种友元函数

在之前的友元中就曾经讲过&#xff0c;我们为了去访问修改私有成员中的数据时&#xff0c;只能通过公有的办法去进行访问操作&#xff0c;非常的局限。所以C引用了友元函数&#xff0c;只要加上friend关键字&#xff0c;C的这个类&#xff0c;会自动把这个函数的权限拉到类内&a…...

动态规划(3)——dp多状态问题Ⅰ

题一.按摩师&#xff08;LeetCode&#xff09; 题目描述 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列&#xff0c;替按摩师找到最优的预约集…...

在Mac电脑上安装adb环境

当你在命令行输入 adb version 或adb devices, 报错&#xff1a;zsh: command not found: adb &#xff0c;那么说明你的 Mac 上没有安装 ADB&#xff08;Android Debug Bridge&#xff09;&#xff0c;或者它没有添加到你的路径中。你可以按照以下步骤安装和配置 ADB&#xff…...

男女做的那些事情的网站/seo薪资seo

目录 C静态库与动态库 什么是库 静态库 Linux下创建与使用静态库 Linux静态库命名规则 创建静态库&#xff08;.a&#xff09; 使用静态库 Linux下创建与使用动态库 linux动态库的命名规则 创建动态库&#xff08;.so&#xff09; 使用动态库 附件&#xff1a;Linu…...

网站开发方案书/国际大新闻最新消息

1.管中窥豹之通过源码了解openGauss多线程架构-8月18日20:00本讲座主要介绍openGauss的多线程架构&#xff0c;通过源码了解线程间通信机制、线程池的原理和优势、如何开启线程池等&#xff0c;力图通过多线程架构这一点&#xff0c;管中窥豹&#xff0c;初步了解openGauss如何…...

网站标识代码怎么加/厦门百度竞价开户

根据你的系统选择你需要下载的jdk&#xff0c;32位系统对应x86&#xff0c;64位系统对应x64下载完后得到一个可执行文件&#xff0c;点击运行进入安装二、安装1.安装JDK选择你要安装到的路径&#xff0c;注意这个路径不能包含中文名这里我们可以通过“更改”选择自己想要安装到…...

做淘宝客的网站需要备案吗/seo索引擎优化

自学PMP报考--考试全流程&#xff1a;如何自学通过PMP? PMP考试是需要35PDU才可以报名的&#xff0c;如果你要自学就可以在某宝上购买PDU&#xff0c;但是个人不建议&#xff08;PDU证明一般是需要授权培训机构提供&#xff0c;在某宝买的第一不知道是否正规&#xff0c;第二…...

wordpress语言翻译/怎样在百度上发帖子

最近接手一个服务器&#xff0c;不过是Windows系统的&#xff0c;运行程序时候总是出一些问题。有点怀疑是系统的问题&#xff1f;于是决定从windows迁移到Linux系统里面去。不过遇到了一个大坑&#xff01;&#xff01;&#xff01;&#xff01;安装过程非常简单&#xff0c;就…...

教育网站建设平台/东莞seo网站排名优化公司

1. 点击元素触发事件的先后顺序&#xff1a;touchstart, touchend, mousedown, mouseup, click 2. Animate 的 stop 问题问题&#xff1a;手机端由于用 CSS3 做动画&#xff0c;所以 zepto 没有 stop 方法。解决&#xff1a;我已自定义扩展了一个方法&#xff0c;目前支持动画 …...