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

Day 1. 学习linux高级编程之Shell命令和IO

1.C语言基础

现阶段学习安排

2.IO编程

   多任务编程(进程、线程)

   网络编程

   数据库编程

3.数据结构


linux软件编程

1.linux:

操作系统:linux其实是操作系统的内核

系统调用:linux内核的函数接口

操作流程:用户——>Shell——>内核——>硬件设备——>用户看到现象

功能:

(1).管理CPU

(2).管理内存

(3).管理硬件设备

(4).管理文件系统

(5).任务调用

用途:

(1).服务器

(2).嵌入式方向

2.Shell:

  (1).保护linux内核(用户和linux内核不直接操作,通过操作Shell,Shell和内核进行交互)

  (2).命令解释器

3.Shell命令:

  (1). 基本命令:

      ls  ,cd   touch  ,mkdir  ,cp   ,mv  ,rm

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

command [-options] arg1 arg2 ……

  (2).Shell文件查看命令:

       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]指定字符12 3 4

                                   [^2]指定除了2以外的字符

              2).whereis:查找指定内容路径

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

              3).grep:查找文件内容

                     示例:grep  'printf'   stdio.h

       (4).重定向

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

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

                       <<   覆盖重定向      将原来的内容覆盖掉

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

       (5).管道

                       将前面命令行的输出作为后面命令的输入

                        示例:ps    -ef   |   grep   bash

       (6). 其余命令:

                      ps  -ef:查看信息进程

                      echo   :在终端打印内容

                      du   -k/-m  :测试文件大小

        (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

                             PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data.
                             64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=1 ttl=51 time=43.6 ms

                       3).将虚拟机设置为NAT模式:

                              NAT模式:windows有网,Ubuntu就有网

                              桥接模式:windows 和 Ubnuntu都会使用网卡,即网络独立

                              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工具源

                                       让虚拟机上网

                                       在Ubuntu左侧找到"Ubuntu Software"

                                       在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"

                                       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);    FILE类型名:结构体

        功能:打开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).行缓存:遇到\n刷新       1k

                   刷新条件:

                    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只能写入字符

 

相关文章:

Day 1. 学习linux高级编程之Shell命令和IO

1.C语言基础 现阶段学习安排 2.IO编程 多任务编程&#xff08;进程、线程&#xff09; 网络编程 数据库编程 3.数据结构 linux软件编程 1.linux&#xff1a; 操作系统&#xff1a;linux其实是操作系统的内核 系统调用&#xff1a;linux内核的函数接口 操作流程&#xff…...

STM32--SPI通信协议(1)SPI基础知识总结

前言 I2C (Inter-Integrated Circuit)和SPI (Serial Peripheral Interface)是两种常见的串行通信协议&#xff0c;用于连接集成电路芯片之间的通信&#xff0c;选择I2C或SPI取决于具体的应用需求。如果需要较高的传输速度和简单的接口&#xff0c;可以选择SPI。如果需要连接多…...

Debezium系列之:MariaDB10.5以上版本赋予数据库账号读取binlog权限的变化

Debezium系列之:MariaDB10.5以上版本赋予数据库账号读取binlog权限的变化 一、背景二、BINLOG MONITOR权限三、BINLOG MONITOR和REPLICA MONITOR的区别四、MariaDB版本升级的影响五、总结一、背景 数据接入会检测账号是否具有REPLICATION SLAVE、REPLICATION CLIENT的权限Mari…...

迅为STM32MP157开发板底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块

底板扩展接口丰富 底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口CAMERA接口、ADC电位器、SPDIF、SDIO接口等。 支持多种显示屏 迅为在MP157开发板支持了多种屏幕&#xff0…...

「实用分享」用界面组件Telerik UI for Blazor增强你的财务图表!

Telerik UI for Blazor拥有110个原生的、易于定制的Blazor UI组件和高性能网格组件&#xff0c;能节约一半的时间开发全新的Blazor应用程序并使传统web项目现代化&#xff0c;其中囊括了设计和生成工具等。Telerik UI for Blazor控件提供的控件&#xff0c;可轻松满足应用程序对…...

使用org.openscada.utgard java opcda库做opc客户端时长期运行存在的若干问题

牛11月09日反馈东区存在以下问题&#xff0c;由于在现场未来得及处理。11月10日反馈西区亦存在此问题。经排查此问题已存在相当长一段时间&#xff08;最长为9月底即存在&#xff09;。 1、读报错Value: [[org.jinterop.dcom.core.VariantBody$EMPTY212c0aff]], Timestamp: Mo…...

杰克与魔法树的冒险

从前有一个小村庄&#xff0c;里面住着一个善良勇敢的小男孩叫杰克。杰克非常喜欢冒险和探索未知的事物。 一天&#xff0c;杰克听说村庄附近的森林里有一个神奇的魔法树&#xff0c;树上结满了金色的苹果。他决定去寻找这棵魔法树&#xff0c;并带回一些金苹果给村庄的居民们。…...

第九节HarmonyOS 常用基础组件22-Marquee

1、描述 跑马灯组件&#xff0c;用于滚动展示一段单行文本&#xff0c;仅当文本内容宽度超过跑马灯组件宽度时滚动。 2、接口 Marquee(value:{start:boolean, step?:number, loop?:number, fromStart?: boolean ,src:string}) 3、参数 参数名 参数类型 必填 描述 st…...

烽火传递

看似很简单的单调队列优化DP 但是如果状态是表示前\(i\)个烽火台被处理完的最小代价(即不知道最后一个烽火台在哪里)就无法降低复杂度 因为假设你在区间\([i-m1,i]\)中枚举最后一个烽火台(设为\(k\))&#xff0c;你前面的状态并不是\(f[k-1]\)&#xff0c;因为此时\(k\)已经可以…...

《深入浅出Go语言》大纲

目录 为什么选择《深入浅出Go语言》&#xff1f; 基础核心模块 为什么选择《深入浅出Go语言》&#xff1f; &#x1f680; 全面的基础知识体系 从环境搭建开始&#xff0c;对Go语言核心知识点进行深入探讨&#xff0c;深度挖掘每个基础知识的本质&#xff0c;为后续深入学习…...

flv视频格式批量截取封面图(不占内存版)--其他视频格式也通用

flv视频格式批量截取封面图&#xff08;不占内存版&#xff09;--其他视频格式也通用 需求&#xff08;实现的效果&#xff09;功能实现htmlcssjs 需求&#xff08;实现的效果&#xff09; 批量显示视频&#xff0c;后端若返回有imgUrl,则直接显示图1&#xff0c; 若无&#xf…...

【鸿蒙】大模型对话应用(三):跨Ability跳转页面

Demo介绍 本demo对接阿里云和百度的大模型API&#xff0c;实现一个简单的对话应用。 DecEco Studio版本&#xff1a;DevEco Studio 3.1.1 Release HarmonyOS SDK版本&#xff1a;API9 关键点&#xff1a;ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 页面跳…...

明道云入选亿欧智库《AIGC入局与低代码产品市场的发展研究》

2023年12月27日&#xff0c;亿欧智库正式发布**《AIGC入局与低代码产品市场的发展研究》**。该报告剖析了低代码/零代码市场的现状和发展趋势&#xff0c;深入探讨了大模型技术对此领域的影响和发展洞察。其中&#xff0c;亿欧智库将明道云作为标杆产品进行了研究和分析。 明…...

【深度学习】SDXL TensorRT Dockerfile Docker容器

文章目录 过程SDXL TensorRT构建SDXL TensorRT LCM 调度器过程 docker push kevinchina/deeplearning:cuda12.1torch2.1.1 FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04 ENV DEBIAN_FRONTEND=noninteractive# 安装基本软件包 RUN apt-get update && \apt-get u…...

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面&#xff0c;旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户&#xff0c;都可以在本文中找到对应的内容&#xff0c;加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…...

PPT、PDF全文档翻译相关产品调研笔记

主要找一下是否有比较给力的全文档翻译 文章目录 1 百度翻译2 小牛翻译3 腾讯交互翻译4 DeepL5 languagex6 云译科技7 快翻:qtrans8 simplifyai9 officetranslator10 火山引擎翻译-无文档翻译1 百度翻译 地址: https://fanyi.baidu.com/ 配套的比较完善,对于不同行业也有区…...

JavaScript 垃圾回收的常用策略和内存管理

垃圾回收 ​ JavaScript 是使用垃圾回收的语言&#xff0c;也就是说执行环境负责在代码执行时管理内存。在 C 和 C等语言中&#xff0c;跟踪内存使用对开发者来说是个很大的负担&#xff0c;也是很多问题的来源。JavaScript 为开发者卸下了这个负担&#xff0c;通过自动内存管…...

如何结合ChatGPT生成个人魔法咒语词库

3.6.1 ChatGPT辅助力AI绘画 3.6.1.1 给定主题让ChatGPT直接描述 上面给了一个简易主题演示一下&#xff0c;这是完全我没有细化的提问&#xff0c;然后把直接把这些关键词组合在一起。 关键词&#xff1a; 黄山的美景&#xff0c;生机勃勃&#xff0c;湛蓝天空&#xff0c;青…...

瑞_23种设计模式_抽象工厂模式

文章目录 1 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;1.1 概念1.2 介绍1.3 小结1.4 结构 2 案例一2.1 案例需求2.2 代码实现 3 案例二3.1 需求3.2 实现 4 总结4.1 抽象工厂模式优缺点4.2 抽象工厂模式使用场景4.3 抽象工厂模式VS工厂方法模式4.4 抽象工厂…...

比瓴科技入围软件供应链安全赛道!为关键信息基础设施安全建设注入新动力

1月20日&#xff0c;中关村华安关键信息基础设施安全保护联盟会员大会暨关键信息基础设施安全保护论坛在北京成功举办&#xff0c;比瓴科技作为会员单位受邀出席。 本次论坛发布了《关键信息基础设施安全保护支撑能力白皮书&#xff08;2023&#xff09;》&#xff0c;比瓴科技…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...