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

day24- 系统编程 概述 及 标准IO

一、系统编程概述

 二、 标准IO

2.1 (以计算机为中心)标准IO

        I:   键盘是标准输入设备        默认输入就是指键盘  /dev/input

        O: 显示器是标准输出设备        默认输出就是指显示器

        一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,加入缓冲区,可以有效减少系统调用的效率,节省系统IO调度资源 

        linux中一切都是文件。文件用来存储数据(数据,指令)

2.2 io的分类

头文件: stdio.h          标准输入输出头文件
               /usr/include/stdio.h                usr前/不可省略,代表最高路径下
               <>   是系统库函数,默认路径在/usr/include/

                eg : stdio.h  ===>stdio.c==>libc.so// 二进制文件 ==>/usr/lib  so 动态库

               ""   是用户自定义函数,默认是当前路径
                eg : ===>xxx.h  ===>xxx.c

  • ldd 查看该文件用了哪些库

man  man  ==>所有man的帮助
man  xxx == man 1 xxx ===>查看当前xxx命令
man 2 xxx  ===>查看xxx对应的系统调用函数
man 3 xxx  ===》查看xxx对应的标准库函数

主要使用1.    2.      3.

  1. 命令行命令
  2. 系统函数调用
  3. C库跨平台调用
  4. 设备类文件介绍
  5. etc文件配置,相关处理,格式
  6. 游戏(不建议)
  7. 总体性描述
  8. 管理员使用命令
  9. 内核更新事件

注意:如果没有命令则直接man xxx 会显示其函数\n
           如果没有系统调用则显示系统库函数帮助 

三、文件读写操作

3.1 操作步骤

  1. 打开文件,FILE
  2. io操作,读写操作
  3. 关闭文件

3.2 详述

3.2.1 FILE

        FILE 结构定义的对象

        FILE * 称之为流对象,也叫文件流指针

3.2.2 读写操作相关

3.2.2.1 fopen函数

        一般形式:fopen(const char * pathname,const char *mode);

mode:

  1. r        打开文件,读文件(从文件刚开始读,且要求文件存在)
  2. r+      打开文件,读写文件(从文件刚开始读,且要求文件存在)
  3. w       清空文件或创建文件用于写文件(位于文件最开始的地方,文件可以不存在)
  4. w+     打开文件,读写文件(位于文件最开始的地方,文件可以不存在)

         返回值:成功返回FILE的指针,否则返回空指针

         可以使用ll查看文件大小

 

3.2.2.2 fputc函数

        一般形式:int fputc(int c,FILE *stream);

3.2.2.3 fclose函数

        一般形式:int fclose(FILE *stream);

        使用cat来查看文件内容

 3.2.2.4 fgetc函数

        一般形式:int fgetc(FILE *stream);

        EOF//文件读完,end of file,宏值为-1;

  •         文本对照工具:vimdiff     文件1     文件2

3.2.2.5 fgets函数

        一般形式:char *fgets(char *s, int size, FILE *stream);

        功能:从stream流对象关联的文件中获取size大小字节的文本数据并存储到s对应的本地内存(栈区数组,堆区内存)
        参数: s 要存储数据的本地内存
                    size 要获取的数据长度,单位字节。
                    stream 要获取的目标文件流对象,
                    可以是stdin ,程序会阻塞等待
                    如果是普通文件fp 则指向文件第一行数据
        返回值:成功 返回指向有效数据的首地址,一般等于s的地址
                      失败 或者 文件末尾 NULL;

gets和fgets的区别:
            1.gets是危险的,因为没有规范读到数据的上限
            2.gets会去掉从终端读入的\n字符
            3.fgets会读到n个数据,如果n个数据中存在\n字符则立即停止当 前的读取操作
            4.fgets不会去掉从流中读到的\n字符        char buf[1024];
            5.fgets(buff, sizeof(buff), stdin);           gets(buff);
 3.2.2.6 fputs函数 

        int fputs(const char *s, FILE *stream);
        功能:从s所在的本地内存中获取一行数据,并写入stream对应的文件流对象。
        参数: s 要写的信息,一般是固定的字符串或者有数据的数组。
                    stream 要写入的目标文件流对象

        返回值:成功 nonnegative number on success
                      失败 -1(EOF);

 

3.3 小练习

        1.实现 cp命令的功能

         优化:

 od -c 文件名                默认看二进制文件

od -t x1 文件名             指定格式,以十六进制一个一个打印

 

相关文章:

  • 使用VGG-16模型来对海贼王中的角色进行图像分类分类
  • 什么是VR展示?VR展示的用途
  • 2025年- H37-Lc145 --42. 接雨水(单调栈)--Java版
  • 01 基本介绍及Pod基础
  • Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)
  • HarmonyOS5云服务技术分享--自有账号对接AGC认证
  • Neon数据库:让Postgres更智能的选择!
  • 新兴技术与安全挑战
  • 分布式序列生成方案 : Redis Incr | 基于Redisson创建自增获取序号,每天更换一个key, key到期时间1天,用于创建订单号、快递单号
  • 《安徽日报》聚焦珈和科技AI创新:智慧虫情测报护航夏粮提质丰产
  • Visual Studio 2022 无法编译.NET 9 项目的原因和解决方法
  • HCIP实验五
  • MD编辑器推荐【Obsidian】含下载安装和实用教程
  • anaconda、miniconda、conda的关系及miniconda安装
  • 使用SQLite Studio导出/导入SQL修复损坏的数据库
  • 【笔记】与PyCharm官方沟通解决开发环境问题
  • 【Java的批量操作】
  • 一洽小程序接入说明
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究
  • NVM 安装与配置指南
  • 国家消防救援局应急通信和科技司负责人张昊接受审查调查
  • 花290多万维修保质期仅一年多?媒体四问凤阳鼓楼“瓦片脱落”
  • 英伟达推出新技术加速AI芯片连接,期望构建互联互通生态
  • 第1现场|俄媒称乌克兰网上出售北约对乌军培训手册
  • 雷军:小米芯片采用3纳米制程,首款SUV“YU7”即将发布
  • 上海将建设万兆小区、园区及工厂,为模型训练数据的传输提供硬件支持