Linux软件编程以及IO输入输出——linux——day1

news2024/9/26 3:30:42

Linux软件编程以及其IO输入输出

Linux软件编程

linux是操作系统的内核

主要有以下几个功能:
①管理CPU
②管理内存
③管理硬件设备
④管理文件系统
⑤任务调度

shell指令

shell命令主要保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互),其次也是命令解释器。

Shell命令:我们可以参考man手册

man 手册(帮助手册)
1.标准命令
2.系统调用
3.库函数
4.设备说明
5.文件格式
6.娱乐
7.杂项
8.管理员命令

	command [-options] arg1 arg2 .. 

Shell基本命令:

    1.ls 
    2.cd 
    3.touch/rm 
    4.mkdir/rmdir 
    5.cp 
    6.mv 

这一块在C语言专栏中已经讲过,这里不再概述。

2.文件查看命令

    (1)cat 
      	查看文件内容(字符)
		ASCII码文件(文件内容均是能在终端显示的ASCII码字符)
    	c .txt 文本文件
        
        二进制文件(文件内容不能够在终端显示,或者显示乱码)
            图片 视频 压缩包

      	示例:
        cat filename 

在这里插入图片描述

    (2)od -c 
      以字符或ASCII码形式显示文件内容 

      示例:
        od -c filename 

在这里插入图片描述

    (3)head/tail 
      查看文件开头/末尾内容(默认10行)

      -n    指定显示的行数

      示例:
        head/tail filename 
        head/tail -n 行数 filename 

在这里插入图片描述

3.文件查找命令

      1.find
      查找一个文件的路径 

      示例:
        find 文件夹 -name 文件名 
        find . -name '*.txt' 
        find . -name '??.txt' 
        find . -name '[1,2,3,4][1,2,3,4].txt' 

    通配符:
        *:匹配任意长度任意字符的文件名 
        ?:匹配一位长度任意字符的文件名
        []:匹配一位长度指定字符的文件名
        [1, 2, 3, 4] 指定字符 1 2 3 4
        [1-4] 指定字符 1 2 3 4
        [^2] 指定除了2以外的字符

在这里插入图片描述

	2.whereis 
      查找指定内容的路径 

      示例:
        whereis 二进制程序名/软件名

    3.grep 
      查找文件中内容 

      示例:
        grep 'printf' /usr/include/stdio.h 

4.重定向:
将原本要输出在终端的内容重定向到一个文件中

    >>  追加重定向      在原来内容基础上追加新的内容
    >   覆盖重定向      将原来的内容覆盖掉

    示例:
        ls > file.txt 
        ls >> file.txt 

5.管道:
将前面命令的输出作为后续命令的输入

    示例:
        ps -ef | grep bash 

6.其余命令:
ps -ef 查看进程信息
echo 在终端打印内容
du -k/-m 测试文件大小

练习:一条shell命令,将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file.txt文件中
答案:tail -n 200 /usr/include/stdio.h | grep ‘extern’ > file.txt

7.压缩解压命令:

    .tar.gz 
    .tar.bz2 

    1.压缩命令:
        tar -zcvf 压缩文件包名.tar.gz 文件夹
        tar -jcvf 压缩文件包名.tar.bz2 文件夹

    2.解压命令:
        tar -zxvf 压缩文件包.tar.gz 
        tar -jxvf 压缩文件包名.tar.bz2 

    示例:
        tar -zcvf dir.tar.gz dir 
        tar -jcvf dir.tar.bz2 dir 

        tar -zxvf dir.tar.gz 
        tar -jxvf dir.tar.bz2 

8.让虚拟机上网:

    1.ifconfig
      查看网卡信息

    2.ping www.baidu.com 
        64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=51 time=32.7 ms
        64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=51 time=32.7 ms

    3.将虚拟机设置为NAT模式:
        NAT模式:Windows有网,Ubuntu就有网
        桥接模式:Windows和Ubuntu网络独立

        1.点击"虚拟机"
        2.点击"设置"
        3.点击"网络适配器"
        4.选择"NAT模式"
        5.点击"确定"
    
    4.配置Ubuntu系统的IP地址为自动获取IP地址
        1.sudo vim /etc/network/interfaces
          打开网卡配置文件
        
        2.修改文件内容为:
            auto lo 
            iface lo inet loopback 

            auto ens33 
            iface ens33 inet dhcp 

        3.保存退出
            ESC
            :wq
        
        4.重启网络服务
            sudo /etc/init.d/networking restart 

    5.测试与百度是否连通
        ping www.baidu.com 

9.apt-get工具集:

        1.自动下载软件
        2.能够分析软件的依赖关系

    1.设置apt-get工具的源:
        1.让虚拟机上网
        2.在Ubuntu左侧找到"Ubuntu Software"
        3.在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"
        4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"
        
    2.执行命令:
        1.sudo apt-get autoclean
            清除旧源
        2.sudo apt-get update 
            更新新源
        3.sudo apt-get install -f 
            重建软件源依赖关系
        4.安装软件
            sudo apt-get install wireshark 
            安装Wireshark软件

            sudo apt-get install valgrind 
            安装valgrind内存泄露检测工具
        5.卸载软件
            sudo apt-get remove 软件名 

        6.查看是否安装成功
            dpkg -l 软件名

        7.安装
            sudo dpkg -i 软件包名.deb 

===============================================================

IO:

1.IO输入输出,操作对象是文件
2.Linux文件类型:
    b   block       块设备文件
                    按块扫描设备信息的文件
                    存储设备

    c   character   字符设备文件
                    按字符扫描设备信息的文件 

    d   directory   目录文件 
                    存放文件

    -               普通文件 
                    存放数据
                    图片、音视频、压缩包、文本文件

    l   link        链接文件 
                    快捷方式

    s   socket      套接字文件
                    用来套接字通信

    p   pipe        管道文件
                    用来进程间通信

3.普通文件:
    1.ASCII码文件
        文件中所有的字符均为能够在终端上显示的字符
        文本文件、程序.c 
    2.二进制文件
        文件中存放数据的二进制形式
        图片、音视频、压缩包 

    ASCII码文件是特殊的二进制文件

4.标准IO、文件IO
    标准IO是库函数
    文件IO是系统调用

    系统调用:功能强大,应对复杂场景不够灵活
    库函数:针对系统调用的封装,使用方便灵活

    标准IO可以在Windows或者Linux平台使用
    文件IO只能在Linux系统平台使用

5.标准IO:
    getchar putchar scanf printf gets puts  -> 标准IO

    #include <stdio.h>

    fopen/fclose 
    fgetc/fputc 
    fgets/fputs
    fscanf/fprintf
    fread/fwrite 
    fseek/rewind/ftell 

6.从文件中读写数据的流程:
    打开文件 -> 读写文件 -> 关闭文件
    fopen                   fclose
                fgetc/fputc     单个字符的读写
                fgets/fputs     字符串的读写
                fscanf/fprintf  格式化字符串的读写
                fread/fwrite    二进制文件的读写

7.函数接口:
    1.fopen
      FILE *fopen(const char *pathname, const char *mode);
      功能:
        打开pathname对应的文件并与其建立一个文件流
      参数:
        pathname:要打开文件路径的字符串
        mode:
            r       只读            文件不存在报错,文件存在只读打开
            r+      读写            文件不存在报错,文件存在读写打开
            w       只写            文件不存在创建,文件存在将文件内容清空,只写打开
            w+      写读            文件不存在创建,文件存在将文件内容清空,写读打开
            a       追加只写        文件不存在创建,文件存在追加只写打开
            a+      追加写读        文件不存在创建,文件存在追加写读打开
      返回值:
          成功返回打开的文件流指针
          失败返回NULL

    2.fclose 
      int fclose(FILE *stream);
      功能:
        关闭文件,释放文件流指针
      参数:
        stream:文件流指针
      返回值:
        成功返回0 
        失败返回EOF(-1)


8.文件流:
    1.具有方向性(读写)
    2.具有连续性
    3.具有顺序性

    句柄:操作对象的一个抽象

    valgrind --tool=memcheck --leak-check=full ./a.out

9.特殊的三个流:
    stdin   标准输入流          从终端读取数据
    stdout  标准输出流          向终端打印数据
    stderr  标准出错流          向终端打印数据 

    getchar、scanf、gets 通过stdin来读取终端数据
    putchar、printf、puts通过stdout来向终端输出数据
    perror通过stderr来向终端输出数据

10.标准IO缓存:
    缓存分为3类:
        1.全缓存  4k
            缓存区满刷新
            
            刷新条件:
                1.缓存区存满刷新(全缓存大小:4096)
                2.fflush函数强制刷新
                3.程序结束/fclose刷新

            与文件建立的缓存

        2.行缓存  1k
            遇到\n刷新  

            刷新条件:
                1.缓存区存满刷新(行缓存大小:1024)
                2.遇到\n刷新 
                3.fflush函数强制刷新
                4.程序结束/fclose刷新

            与终端建立的缓存            stdin   stdout 

        3.不缓存
            直接刷新

            缓存区大小 0k               stderr

            人机交互、界面控制、出错处理

        4.setvbuf
          int setvbuf(FILE *stream, char *buf, int mode, size_t size);
          功能:
            改变一个流的缓存类型
          参数:
            stream:文件流指针
            buf:指定缓存空间的首地址
            mode:
                _IONBF  不缓存
                _IOLBF  行缓存
                _IOFBF  全缓存
            size:
                设定缓存区的大小
          返回值:
            成功返回0 
            失败返回非0 

11.fputc 
   int fputc(int c, FILE *stream);
   功能:
    向流中写入一个字符
   参数:
    c:写入字符的ASCII码值
    stream:文件流指针 
   返回值:
    成功返回写入字符的ASCII码值
    失败返回EOF

   注意:
    1.fputc只能写入一个字符,写入多个字符需要多次调用fputc
    2.fputc只能写入字符

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

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

相关文章

mermaid使用指南+notion使用实例-持续更新中

最近一个月了吧&#xff0c;发现Notion插入图片的功能坏了&#xff0c;直接paste会404&#xff0c;本地上传也不行。电脑本地版和手机端都插不了图片&#xff0c;很头疼。解决方法也简单&#xff0c;用图床&#xff0c;放链接。 付费版我用的七牛&#xff0c;结合PicGo&#x…

使用ngrok内网穿透

没有服务器和公网IP&#xff0c;想要其他人访问自己做好的网站&#xff0c;使用这款简单免费的内网穿透小工具——ngrok&#xff0c;有了它轻松让别人访问你的项目~ 一、下载ngrok 官网地址&#xff1a;ngrok | Unified Application Delivery Platform for Developers&#x…

React18构建Vite+Electron项目以及打包

一.先创建项目 cnpm create vite 选择React > JavaScript >cd react_vite > cnpm i >npm run dev 二.安装Electron依赖 指定版本相对稳定 cnpm i electron19.0.10 -D cnpm i vite-plugin-electron0.9.3 -D cnpm i electron-builder23.0.1 -D三.创建electron目录…

gRPC使用详解

起源特点主要优缺点应用场景组成部分使用方法SpringBoot集成gRPCVert.x集成gRPCNacos集成gRPC监控gRPC调用过程Java使用示例 起源 gRPC的起源可以追溯到2015年&#xff0c;当时谷歌发布了一款开源RPC框架&#xff0c;名为gRPC。gRPC的设计初衷是为了提供一种标准化、可通用和跨…

Java基于 SpringBoot+Vue 的前后端分离的小区物业系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

车载测试Vector工具——基于DoIP的ECU/车辆的连接故障排除

车载测试Vector工具——基于DoIP的ECU/车辆的连接故障排除 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和…

DevOps 教程 (4) - CI/CD 整合

在本第四章的"DevOps 教程"系列中&#xff0c;我们将介绍CI/CD整合的概念和实践。我们会介绍DevOps所带来的好处&#xff0c;包括团队协作、开发效率和产品交付速度的显著提升。 我们还将讨论在DevOps中的不同角色&#xff0c;并理解每个角色在持续集成和持续交付中的…

AI助力农作物自动采摘,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物&#xff0c;专家设计出来了很多用于采摘不同农作物的大型机械&#xff0c;看着非常震撼&#xff0c;但是我们国内农业的发展还是相对比较滞后的&#xff0…

【C语言期末】职工管理系统

本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88805231 1.题目要求 职工管理系统 问题描述&#xff1a;对单位的职工进行管理&#xff0c;包括插入、删除、查找、排序等功能。 要求&#xff1a;职工对象包括姓名、性别、出生年月、工作年月、学历…

【Springcloud篇】学习笔记二(四至六章):Eureka、Zookeeper、Consul

第四章_Eureka服务注册与发现 1.Eureka基础知识 1.1Eureka工作流程-服务注册 1.2Eureka两大组件 2.单机Eureka构建步骤 IDEA生成EurekaServer端服务注册中心&#xff0c;类似于物业公司 EurekaClient端cloud-provider-payment8081将注册进EurekaServer成为服务提供者provide…

将结构体中的浮点数数据提取出来并发送至串口屏显示

1、由于项目中定义了一个结构体如下&#xff1a; typedef struct {uint16_t number;uint16_t LocationData;uint16_t PersonData; // _calendar_obj calendar; // uint16_t LiuLiang_Value;float LiuLiang_Value;_calendar_obj calendar_records; } Frame; 现需要将其中的flo…

新手从零开始学习数学建模论文写作(美赛论文临时抱佛脚篇)

本文记录于数学建模老哥视频的学习过程中。b站视频&#xff1a;http://【【零基础教程】老哥&#xff1a;数学建模算法、编程、写作和获奖指南全流程培训&#xff01;】https://www.bilibili.com/video/BV1kC4y1a7Ee?p50&vd_sourceff53a726c62f94eda5f615bd4a62c458 目录…

一分钟教你搭建steam幻兽帕鲁服务器,稳定不卡

如何自建幻兽帕鲁服务器&#xff1f;基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了&#xff0c;一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器&#xff0c;阿里云百科aliyunbaike.com分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程&…

2024年适合进入股市吗?北京想开股票账户找哪家证券公司交易佣金费用最低?

股市规则是指股票市场中的一系列规则和制度&#xff0c;用于监管和管理股票交易。以下是一些常见的股市规则&#xff1a; 证券法律法规&#xff1a;股市规则的基础是国家的证券法律法规&#xff0c;包括证券法、公司法等&#xff0c;用于规范股票发行、交易和上市等方面的法律规…

【紧耦合新范式】Think-on-Graph:解决大模型在医疗、法律、金融等垂直领域的幻觉

Think-on-Graph&#xff1a;解决大模型在医疗、法律、金融等垂直领域的幻觉 Think-on-Graph 原理ToG 算法步骤&#xff1a;想想再查&#xff0c;查查再想实验结果 论文&#xff1a;https://arxiv.org/abs/2307.07697 代码&#xff1a;https://github.com/IDEA-FinAI/ToG Think…

AI专题:2023年AI创意营销趋势白皮书

今天分享的是AI系列深度研究报告&#xff1a;《AI专题&#xff1a;2023年AI创意营销趋势白皮书》。 &#xff08;报告出品方&#xff1a;蓝色光标集团销博特&#xff09; 报告共计&#xff1a;65页 2022年10月 Stabili ty AI获得1.01亿美元融资 开源人工智能公司 StabilityA…

STM32CAN2进入bus off 模式

工作遇到的问题记录 无人机CAN2整个进不了中断&#xff0c;通过查看寄存器判定出CAN节点进入了bus off mode 为何进入bus off &#xff0c;最后通过示波器看到整个CAN2总线波形就不对&#xff0c;总线出现了错误 Busoff的产生是一定是因为节点自身识别到自己发送错误&#xff…

Konva中滚动问题

现在有两个group,想要的效果时拖动绿的group时&#xff0c;红色group按照相同方向移动同样距离 可以在绿的group的拖动方法中 通过move方法 移动红色的group

零基础Vue框架上手;git,node,yarn安装

项目搭建环境&#xff1a; git安装&#xff1a;Git - 安装 Git (git-scm.com)&#xff08;官网&#xff09; 下载路径&#xff1a;Git - Downloading Package (git-scm.com)&#xff1b;根据自己电脑下载相对应的安装包 ​ 点next ​ 点next&#xff0c;点到最后安装就行。…

人工智能基础-matplotlib基础

绘制图形 import numpy as np x np.linspace(0, 10, 100) y np.sin(x) import matplotlib as mpl import matplotlib.pyplot as plt plt.plot(x, y) plt.show()绘制多条曲线 siny y.copy() cosy np.cos(x) plt.plot(x, siny) plt.plot(x, cosy) plt.show()设置线条颜色 …