Linux:C/C++文件操作

news2024/11/26 2:01:50

回忆C语言文件操作

  1. fopen()的使用:
      答:打开文件流指针。
    param2 = “w”,当前没有文件就先创建,再写入。
    “r”,只读。
    “b”,可与w、b组合。
  • 只写的例子:
    请添加图片描述
    请添加图片描述
  • 只读的例子:
    依靠fgets(),还要借助buffer,最后还要判断文件是否有读出错,如果读出错,fgets也是0。
    请添加图片描述
    请添加图片描述
  • 追加的例子:param2:a
    请添加图片描述
    以a的形式追加,cat到txt内容更多。
    请添加图片描述
    如果mode=w,就会覆盖,把之前有的也删掉
  1. fputs():
      答:向特定文件写入。会打开默认的三个文件流。

  2. fgets():
      答:读取专用,需要借助缓冲区,在第二个参数上给size。
    如1中读文件的例子,给fgets(buffer, buffer_size, file_p)

  3. C语言文件操作fputs默认打开的输出流:
      答:fputs()会打开stdin、stdout、stderr。这三个流本质是FILE*。
    对应设备:
    stdin:键盘
    stdout:显示器
    stderr:显示器
    而C++会打开:cin、cout、cerr。

  4. 实验: 测试流stdout对应的是显示器
    观察如下代码,如果fputs默认打开三个文件流,那么stdout对应设备显示器应该打开了。所以给stdout写入msg,会在显示器上直接输出。
    请添加图片描述
    请添加图片描述
    至此,验证了通过stdout直接向显示器写入。
    总之,虽然编程语言可能会和和OS、驱动等交互,但是本质其实是想对硬件做出操作,所以语言上对“文件”的操作如函数:fopen、fclose、fread、fwritefputs、fgets等,都必须贯穿操作系统。
    请添加图片描述

C++文件操作

  • 写入实例:
    ofstream:std::ios::out没有文件,生成空文件。有则覆盖。
    请添加图片描述
      结果:
    请添加图片描述

WRONLY:写方式打开,O_CREAT:文件不存在,就创建。此外,0644是权限参数,如果不加,会导致权限混乱如下:
请添加图片描述

  1. 编写C语言文件。
    请添加图片描述
  • 关于open():
    param2:flags是标志位。有32位,如上第二行,有两个标志位。可以用|方式传递多个。你传入参后,底层会做&操作。如上的O_WRONLY、O_CREAT都是只有一个比特位是1的数据,且不重复。
    每个值转为二进制都只有一个bit位是1。所以两个值或一下,让两个位置是11,所以和传入参做&,就可以得到真实想要的值。
  • 一条装杯的可查看系统源文件中这些标志值真实大小的命令:
grep -ER 'O_CREATE|O_RDONLY' /usr/include/

grep -E是过滤寻找,R是递归查找。
请添加图片描述
接下来去如上图中的/usr/include/asm-generic/fcntl.h
然后通过vim 编辑这个文件,再在命令行上:./RDONLY查看发现了是全0和全1。
请添加图片描述

  1. 运行后查看log权限。 正常了请添加图片描述
  • open()的返回值:有返回值。如下1输出3。3正常,-1是打开失败。
    请添加图片描述
    请添加图片描述

  • 承上,0、1、2去哪儿了?
      答:其实是0:标准输入(键盘),1:标准输出(显示器),2:标准错误(显示器)。
    请添加图片描述

  • 系统打开文件的本质:
      答:所有文件操作本质都是进程执行对应的函数、进程对文件操作、操作文件必须先打开文件。将文件相关属性信息加载到内存。一个进程可以打开多个文件。

  • 进程会打开很多文件,操作系统必须管理打开的文件,如何管理呢?
      答:先描述,再组织。这里有一个数据结构:file,保护了打开文件的相关属性、链接属性。

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

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

相关文章

《Linux性能优化实战》学习笔记 Day01

学习目标 系统优化的旅程上,对操作系统相关的优化是绕不开的,主动出击,将零星的知识体系化。今后遇到问题,能够加入自己的体系树中,即使专栏中没有提到,自己也能够想办法深入。 希望在这次课程后&#xf…

黑马Redis | 基础篇

目录 一、SQL和NoSQL的区别 结构化与非结构化 关联和非关联 查询方式 事务 总结 二、Redis数据类型和命令 1、通用命令 2、数据类型 3、String类型 String的常见命令 Key结构 4、Hash类型 常见命令 5、List类型 6、Set类型 Set的常见命令 7、SortedSet类型 …

科研快报|PacBio全长扩增子测序破解蚊子肠道微生态与耐药性差异

论文题目:Differences in the intestinal microbiota between insecticide-resistant and -sensitive Aedes albopictus based on full-length 16S rRNA sequencing.期刊:Microbiologyopen影响因子:3.139发表时间:2021年1月研究背…

一个非常好用的中奖概率控制器

本文首发于微信公众号: 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。嗨!大家好,我是小蚂蚁。今天分享一个非常好用的概率控制器,可以用于游戏中两种行为出现的概率控制。这个…

PHP MySQL 插入数据

使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据。 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号在 SQL 查询语句中的字符串值必须加引号数值的值不需要引号NULL 值不需要引号 INSERT INTO 语句通常用于…

《Linux Shell脚本攻略》学习笔记-第十三章

13.1 简介 现代Linux应用可以部署在专门的硬件、容器、虚拟机或是云端。 容器的缺点在于它以来于主机的系统内核。 虚拟机的防在于要占用大量的磁盘空间。 如果你想同时运行多个虚拟机,必须要有足够的内存来支撑各个虚拟机。否则,主机就不得不开始交换页…

SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践

作者:高玉龙 (元泊)首先,我们了解一下移动端全链路 Trace 的背景:从移动端的视角来看,一个 App 产品从概念产生,到最终的成熟稳定,产品研发过程中涉及到的研发人员、工程中的代码行数、工程架构规模、产品发…

探索VGG网络与LeNet网络对精度的影响

1 问题在学习不同网络模型对实验精度的影响过程中,对我们的实验结果,各种参数数值的改变有何变化,有何不同。VGG-11网络与LeNet-5网络对精度和损失的影响研究。训练周期20其他参数都相同的方式来探索最终的精度。2 方法对于VGG-11网络&#x…

QTreeWidget 设置任意行背景色

设置任意某行,网上这类示例少,一般都是选中行、交替行、高亮行等设置。 比如我要将顶层节点的背景色修改一下。 方法1,先继承QTreeWidget,更改它的 drawBranches函数,在里面添加条件判断,然后根据需要设置颜色。 #i…

【计算机体系结构-01】指令集体系结构、微体系结构简介

1. “虚拟” to “现实” 首先可以看这张图片,下面的 Physics 所指的是我们的物理世界中看得见摸得到或者是客观存在的事物,而人类希望将自己的工作内容或者需求以某种方式映射到物理层面上,用物理变化带来的影响来完成人类工作内容。例如早期…

Python【r e】模块正则表达式[中]实战

正则表达式相关函数和符号用法:#正则表达式""".匹配任意某个字符[.]与转义字符的作用一致,表示匹配.,配合 ,[.],即匹配一次或则多次. text . 或则 text ...2.从头匹配或者从左往右匹配re.match()"""import …

IDEA整合Docker,一键打包服务镜像与启动容器

尝试了IDEA整合Docker,坑有些多,但经过查阅资料都一一解决了,写了个案例,感觉这种方式确实要方便很多。下面来整理下步骤: 一、安装Docker 准备一台Linux,我这里用的是centos 7 mini 版,然后安…

内网穿透的概念及解决方案

1.什么是内网穿透 在外网的web请求可以转发到内网的本地服务 2.什么是内网?什么是外网? 内网(也叫局域网(Local Area Network,LAN))是在一个局部的地理范围内,一般可以是是几米内(比如家庭内网),也可以是方圆几千米…

2023 年 10 大最佳 GIS 软件

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 GIS 是一个分析地理相关性…

【算法】拓扑排序

目录1.概述2.代码实现3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 &#xff08;1&#xff09;拓扑排序 (Topological Sort) 是指将有向无环图 G (V, E) 中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点 u 和 v&#xff0c;若边<u, v> ∈ E(…

esp32 使用u8g2图形库 IIC驱动OLED

简介&#xff1a;使用U8g2库进行OLED的显示十分简单&#xff0c;首先要包含两个库&#xff0c;U8g2lib和Wire&#xff0c;后者是IIC通信需要用。对于IIC接口的OLED&#xff0c;需要在程序中指定一下引脚的接口定义&#xff0c;如果是SPI接口&#xff0c;可以参考U8g2库自带例程…

【Leetcode】NC31 第一个只出现一次的字符(牛客网)、面试题 01.01. 判定字符是否唯一

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 NC31 第一个只出现一次的字符 第一个只出现一次的字符_牛客题霸_牛客网【牛…

数据结构与算法(三)——顺序查找和二分查找

什么是查找 在一些数据元素中&#xff0c;通过一定的方法找出与给定关键字相同的数据元素的过程。 什么是列表查找 也叫线性表查找&#xff0c;从列表中查找指定元素 列表查找是一种算法&#xff0c;对应的自然就有输入和输出&#xff1a; 输入&#xff1a;列表、待查找元素…

【实际开发08】- Controller 层处理入参 , 可避免进去 impl 层

目录 1. 增 / 删 / 改 - 记录日志 , 查询不记录日志 2. 第一批次 : 参数校验 ( id、id1 id2 、&#xff1f;) 3. 增 / 改 dto 判空 , 实体类层 ( entity ) 进行处理 4. 通用修改 的 impl 层可供 ( status、普通 ) 使用 5. 入参优先级 : Json > Map > Javabean 1. …

终于有人将Session和cookie讲明白了!一节课彻底搞懂

1 引出session cookie session与cookie属于一种会话控制技术。常用在身份识别&#xff0c;登录验证&#xff0c;数据传输等。举个例子&#xff0c;就像我们去超市买东西结账的时候&#xff0c;我们要拿出我们的会员卡才会获取优惠。这时候&#xff0c;我们怎么识别这个会员卡真…