Linux-文件基本操作

1.基本概念
文件:
    一组相关数据的集合 
文件名:
    01.sh //文件名 

2.linux下的文件类型 
  b block         块设备文件   eg: 硬盘 
  c character     字符设备文件 eg: 鼠标,键盘
  d directory     目录文件     eg: 文件夹 
  - regular       常规文件     eg: 1.txt 01.sh xx.bmp 
  l symblink      软链接       eg: 快捷方式
  s socket        套接字       eg: 网络通信用
  p pipe          管道         eg: 进程间通信 
 

3.思想 
  linux中一个核心思想 
  everything is file!
 

4.文件的基本操作 

【1】用户方面
 打开(新建)
 输入(写数据)
 阅读(读取)
 删除 
 插入
 修改 
 关闭 (保存)
 
 【2】研发方面
 1.打开 
 2.写 
 3.读 
 4.关闭 


5. linux操作文件的函数 
   两套函数 (两套操作路径)
   
   (1) 系统调用 --- 内核提供的函数      
   (2) 库函数   --- 第三方提供的函数 
       
    (1).库函数 
    c library  // c库函数 

    集成了很多功能函数 
    //标准输入输出 
    //数学函数 
    //... 
     -lm 
    #include <math.h>
    
    
    标准输入输出 --- stdio 文件操作 
    
    
    标准io; stdio.h
1.标准io的概念 
    1975 Dennis r IO库,
    从C语言的标准,ANSI c 
    IO  input  output
    I: 键盘是标准输入设备 ====》默认输入就是指键盘  /dev/input
    O: 显示器是标准输出设备 ==》默认输出就是指显示器
    
    Linux操作系统当中IO都是对文件的操作
    C一部分,任何支持标准C的系统都可使用标准IO实现文件存储
    标准IO在UNIX上是对文件IO的封装
   
    一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,
    加入缓冲区,可以有效减少系统调用的次数,节省系统IO调度资源
    
    说明:
    标准IO库,不单单是linux上有,在windows,Mac os上都有。
    很多操作系统都实现了标准IO库。
    都是依据IOS C标准实现的。
    所以基本保证了可移植性。
    但是因为标准和具体实现之间的差异,
    未必敢保证所有的函数在都可以相互通用。
    
    标准IO都干了些啥?
    标准IO处理了很多细节:
    (1).处理缓冲区分配   (缓存--提高效率 --- 慢速 快速)
    (2).读写IO的块长度的优化
    (3).对系统调用进行了封装,内部对应的"文件描述符" 
    
    好处:
        用户使用方便,不必再担心如何选择正确的块长度。
    //地位:
        标准I/O库是由 Dennis Ritchie在1975年左右编写的。
        它是Mike Lesk编写的可移植I/O库的主要修改版本。
        令人惊讶的是,50年来,几乎没有对标准I/O库进行修改。

6. 函数接口 
  
       
 1.打开 -- fopen  //file open  
 2.写/读 
   //按字符读写 
   fgetc/fputc 
   //按行读写 
   fgets/fputs 
   //按对象读写
   fread/fwrite   
 3.关闭 
   fclose --- file close

  fopen 
   
  man手册的内容 
      Name 名字+简短说明 
      SYNOPSIS 头文件 + 函数原型 
      DESCRIPTION 函数的一些实用细节说明   
      RETURN VALUE 返回值
  FILE * fopen(const char *pathname,const char *mode);
  功能:
         流打开函数
  参数:
     @pathname --- 要打开的文件名 //字符串形式的名字 
     @mode     --- 打开的模式 
       r   --- 只读  
       r+  --- 读写 
               说明: 带r的 要求,文件必须存在 ,如果不存在,就会报错
       w   --- 只写 
       w+  --- 读写 
               说明:  
                   文件存在 ,截断成 0长度 
                   不存在,则创建
       a  --- 追加(写)
       a+ --- 读写 
              说明:
                 读 从头读 
                 写 从末尾开始写 
                 文件存在 则打开做写操作即可 
                 文件不存在 创建文件 
  返回值:
     成功 FILE*指针  //文件指针 流指针 --- 从程序上讲,FILE *指针就代表打开的这个文件
     失败 NULL 同时 errno会被设置 
     
  void perror(const char *s);
  功能:
      打印错误信息 
  参数:
    s  //用户自定义字符串


 

7.fgetc
 int fgetc(FILE * stream);
 功能:
     从文件中读取字符 
 参数:
     @stream 表示要读取的文件对应的流指针 
 返回值:
     成功 对应字符的ASCII码值 
     失败 EOF 到达文件结尾 
          出错 
          
问题:
   EOF  
   文件中有没有 EOF?  //只是到达结尾时的一个标志

8.fputc

 int fputc(int c,FILE *stream);
  功能:
      将一个字符输出到指定的流(文件)
  参数:
    @c          //要输出的字符 ---ascii码值
    @stream     //指定的文件 
  返回值:  
    成功 被写入的字符的ASCII码值
    失败 EOF 
    
系统默认打开的流指针:
stdin  //标准输入 
stdout //标准输出 
stderr //标准出错 --- 屏幕  --- 可以专门把错误信息输出到 stderr 

9.fclose

  int fclose(FILE *stream);
  功能:
     关闭文件 
      刷新流
      关闭了底层文件描述符
 返回值:
   成功 0
   失败 EOF
   注意,不要多次重复关闭

练习:
     cp src.txt dest.txt 
     
     //1.打开文件 
     src.txt //读
     dest.txt //写 
     //2.读写
     从 src中读数据 
     写到 dest中
     //3.关闭 
     fclose 


   10.fgets

char * fgets(char*s,int size,FILE*stream)
功能:
   从stream中读取size-1个字符,到s指向的空间 
参数:
  @s        //存放读取到的数据 对应的内存空间 
  @size     //指定一次最多读取多少个字符 
  @stream   //表示要读取的文件 
返回值:
   成功 返回s
   失败 NULL 
        读到文件结尾 也 返回NULL 

        
注意:
   fgets读取结束:
   1. EOF
   2. '\n'
   3. size-1

11.fputs
   
   int fputs(const char *s, FILE *stream);
   功能:
      输出s到stream中
   参数:
    @s 代表要输出的字符串 
    @stream 代表 输出到的文件 
   返回值:
    成功 非负数 
    失败 EOF
    
  注意:
     不会将 '\0' 输出 

        
练习:
      cat //fgets实现cat 
      
    

练习:
     统计文件行数 

练习:
   从键盘输入数据,
   把数据保存到一个文件中


练习:
   cp    

3

12.fputs(buf,);
 
 
 "123" --- 文本文件 --- '1''2''3'  //每个数据是按照固定的编码格式存放的 -ASCII
 123   --- 二进制   --- 01111011   //
 
 linux下操作时 ,没有区别 
 windows下区别 
 
 说明:
    1.fgets 和 fputs 在拷贝 二进制文件时 可能出问题 



 

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

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

相关文章

【前端】 react项目使用bootstrap、useRef和useState之间的区别和应用

一、场景描述 我想写一个轮播图的程序&#xff0c;只是把bootstrap里面的轮播图拉过来就用上感觉不是很合适&#xff0c;然后我就想自己写自动轮播&#xff0c;因此&#xff0c;这篇文章里面只是自动轮播的部分&#xff0c;没有按键跟自动轮播的衔接部分。 Ps: 本文用的是函数…

react脚手架搭建react项目使用scss

1.create-react-app 创建的项目&#xff0c;webpack配置默认是隐藏的 &#xff0c;如果要查看 或修改用npm run eject命令,因为create-react-app脚手架默认已经配置了scss、sass所以不用改webpack配置。如果用less 就需要自己添加配置 2.如果直接使用scss的文件会直接报错&…

LabVIEW与USB设备开发

开发一台USB设备并使用LabVIEW进行上位机开发&#xff0c;涉及底层驱动的编写、USB通信协议的实现以及LabVIEW与设备的接口设计。本文将详细介绍如何开发USB设备驱动、实现LabVIEW与USB设备的通信以及优化数据传输&#xff0c;帮助用户顺利完成项目开发。下面是一个详细的说明&…

高通android WIFI debug

参考高通文档&#xff1a;80-76240-16_REV_AA_Wi-Fi_Debug_Techniques 大纲 一、 WLAN Debug Logs –logcat ■ Logcat log logcat is a command-line tool that dumps the log of system messages, ■ Including stack traces when the device throws an error. ■ Need t…

Golang轻松实现消息模板变量替换:text/template

text/template 是 Go 语言标准库中的一个包&#xff0c;用于生成文本输出。它通过解析模板并根据给定的数据执行模板来生成最终的文本。text/template 提供了强大的模板引擎&#xff0c;支持条件判断、循环、变量替换等功能。 基本概念 模板&#xff1a;模板是一个文本文件或…

蓝桥杯之并查集

算法思想 并查集是一种树形的数据结构&#xff0c;主要用于解决一些元素分组问题。用于处理一些不相交集合的合并以及查询问题。并查集的思想是用一个数组表示了整片森林&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的树根&#xff0c;就能确…

list_for_each_entry_safe 简介

list_for_each_entry_safe 是 Linux 内核中用于遍历链表的一个宏&#xff0c;特别适用于在遍历过程中可能需要删除链表节点的场景。它的设计保证了在删除当前节点时&#xff0c;不会影响后续节点的访问&#xff0c;从而实现安全的遍历。 定义 #define list_for_each_entry_sa…

如何在Java EE中使用标签库?

在Java EE&#xff08;现在称为Jakarta EE&#xff09;中使用标签库&#xff08;Tag Library&#xff09;&#xff0c;主要是通过JSP标准标签库&#xff08;JSTL&#xff09;或自定义标签库来实现的。标签库允许在JSP页面中使用自定义的标签&#xff0c;从而简化页面逻辑、增强…

el-table封装一个自定义列配置表格组件(vue3开箱即用)

组件核心功能 拖拽排序&#xff08;使用 vuedraggable&#xff09; 显示/隐藏控制 列宽调整 列固定状态记忆 搜索过滤列 本地存储&#xff08;localStorage&#xff09;可改成接口保存 默认配置恢复 通过 searchText 动态过滤列。 安装拖拽依赖 npm install vuedragg…

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南

基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与Redis集成及故障排查指南 禅道镜像版本&#xff1a;easysoft/zentao:21.4 Redis版本&#xff1a;redis:6.2.0 Mysql版本&#xff1a;mysql:8.0.35 文章目录 **基于Docker-compose的禅道部署实践&#xff1a;自建MySQL与…

九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表

文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中&#xff0c;随着数据量的不断增长&#xff0c;单一数据库已难以满足高可用性、扩展性和…

如何借助NoETL指标平台实现数据分析、决策的提效?

通常&#xff0c;企业通过明确分析目标、定位所需分析的数据&#xff0c;再通过多渠道汇集销售数据、客户反馈、市场调研等信息&#xff0c;经过数据清洗、缺失值处理及格式标准化等手段&#xff0c;运用描述性统计、回归分析、聚类分析及关联规则挖掘等多样分析方法&#xff0…

hexo 魔改 | 修改卡片透明度

hexo 魔改 | 修改卡片透明度 ** 博客食物用更佳 博客地址 ** 这是笔者自己瞎倒腾的。作为前端菜鸡一枚&#xff0c;大佬们随便看看就好~ 我用的主题是 butterfly 4.12.0 分析 通过开发者工具可以看出来卡片的背景和 --card-bg 变量有关 再在 sources 下的 css 文件夹下的…

Qt的QTableWidget样式设置

在 Qt 中&#xff0c;可以通过样式表&#xff08;QSS&#xff09;为 QTableWidget 设置各种样式。以下是一些常见的样式设置示例&#xff1a; 1. 基本样式设置 tableWidget->setStyleSheet(// 表格整体样式"QTableWidget {"" background-color: #F0F0F0;…

MySQL、MariaDB 和 TDSQL 的区别

MySQL、MariaDB 和 TDSQL 是三种不同的数据库管理系统&#xff0c;它们在设计理念、功能、性能和使用场景上有一些显著的区别。 以下是对这三者的详细比较和介绍。 1. MySQL 概述 类型&#xff1a;关系型数据库管理系统&#xff08;RDBMS&#xff09;。开发者&#xff1a;最…

制造业物联网的十大用例

预计到 2026 年&#xff0c;物联网制造市场价值将达到 4000 亿美元。实时收集和分析来自联网物联网设备与传感器的数据&#xff0c;这一能力为制造商提供了对生产流程前所未有的深入洞察。物联网&#xff08;IoT&#xff09;有潜力彻底改变制造业&#xff0c;使工厂能够更高效地…

JVM——堆的回收:引用计数发和可达性分析法、五种对象引用

目录 引用计数法和可达性分析法 引用计数法&#xff1a; 可达性分析算法&#xff1a; 五种对象引用 软引用&#xff1a; 弱引用&#xff1a; 引用计数法和可达性分析法 引用计数法&#xff1a; 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&…

提升编程效率,体验智能编程助手—豆包MarsCode一键Apply功能测评

提升编程效率&#xff0c;体验智能编程助手—豆包MarsCode一键Apply功能测评 &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 目录 引言豆包…

【前端】【面试】vue动态样式总结

在 Vue 中&#xff0c;动态样式的设置是一个常见需求&#xff0c;可通过多种方式实现&#xff0c;以下是对这些方式的详细总结&#xff1a; 1. 绑定 class 属性 对象语法 可以给 :class 绑定一个对象&#xff0c;以动态地切换类名。对象的键是类名&#xff0c;值是一个布尔值…

Java--IO流详解 (上)--字符流

目录 IO流的概念 字符流 输入流 Reader核心方法 1.close() 2.mark(int readAheadLimit) 3.markSupported() 4.read() 5.read(char[] cbuf) 6.read(char[] cbuf, int off, int len) 7.read(CharBuffer target) 8.ready() 9.reset() 10.skip(long n) Reader 的常用…