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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉-阅读内容和风格图像

首先&#xff0c;我们读取内容和风格图像。 从打印出的图像坐标轴可以看出&#xff0c;它们的尺寸并不一样。 %matplotlib inline import torch import torchvision from torch import nn from d2l import torch as d2ld2l.set_figsize() content_img d2l.Image.open(../img/…

Linux下编译EtherCAT主站SOEM-1.4.1

目录 1、SOEM下载 2、CMake安装​​​​​​ 3、编译 环境&#xff1a;Ubuntu1604. 1、SOEM下载 最新版为SOEM-v1.4.0&#xff0c;可以从github下载地址&#xff1a; https://github.com/OpenEtherCATsociety/SOEM 2、CMake安装​​​​​​ 3、编译 解压文件&#xff0c…

c++虚函数、静态绑定与动态绑定

首先说明&#xff0c;所谓绑定&#xff0c;就是指函数的调用 接下来&#xff0c;我们直接看一段代码来说明问题 class Base { public:Base(int data10):m_a(data){}void show(){cout<<"Base::show()"<<endl;}void show(int){cout<<"Base::sh…

[python]基于LSTR车道线实时检测onnx部署

【框架地址】 https://github.com/liuruijin17/LSTR 【LSTR算法介绍】 LSTR车道线检测算法是一种用于识别和定位车道线的计算机视觉算法。它基于图像处理和机器学习的技术&#xff0c;通过对道路图像进行分析和处理&#xff0c;提取出车道线的位置和方向等信息。 LSTR车道线…

docker镜像结构

# 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["java", "-jar"…

[SWPUCTF 2021 新生赛]babyrce

我们打开发现他让我们输入cookie值为admin1 出现一个目录 我们跳转进去 我们可以发现这个有个preg_match不能等于空格不让会跳转到nonono我们可以通过${IFS}跳过

桌面显示器应用Type-C接口有什么好处

随着科技的不断发展&#xff0c;桌面显示器作为我们日常工作中不可或缺的设备之一&#xff0c;也在不断更新换代。其中&#xff0c;Type-C接口的应用成为了桌面显示器发展的一个重要趋势。那么&#xff0c;桌面显示器应用Type-C接口究竟有什么好处呢&#xff1f; 首先&#xff…

一文教你地平线旭日派X3部署yolov5从训练-->转模型-->部署

一文教你地平线旭日派X3部署yolov5从训练&#xff0c;转模型&#xff0c;到部署 近日拿到了地平线的旭日派X3&#xff0c;官方说是支持等效5tops的AI算力&#xff0c;迫不及待的想在上面跑一个yolov5的模型&#xff0c;可谓是遇到了不少坑&#xff0c;好在皇天不负有心人&…

【Leetcode】1690. 石子游戏 VII

文章目录 题目思路代码结果 题目 题目链接 石子游戏中&#xff0c;爱丽丝和鲍勃轮流进行自己的回合&#xff0c;爱丽丝先开始 。 有 n 块石子排成一排。每个玩家的回合中&#xff0c;可以从行中 移除 最左边的石头或最右边的石头&#xff0c;并获得与该行中剩余石头值之 和 相…

H5 加密(MD5 Base64 sha1)

1. 说明 很多的时候是避免不了注册登录这一关的&#xff0c;但是一般的注册是没有任何的难度的&#xff0c;无非就是一些简单的获取用户输入的数据&#xff0c;然后进行简单的校验以后调用接口&#xff0c;将数据发送到后端&#xff0c;完成一个简单的注册的流程&#xff0c;那…

SVDiff: Compact Parameter Space for Diffusion Fine-Tuning——【论文笔记】

本文发表于ICCV 2023 论文地址&#xff1a;ICCV 2023 Open Access Repository (thecvf.com) 官方代码&#xff1a;mkshing/svdiff-pytorch: Implementation of "SVDiff: Compact Parameter Space for Diffusion Fine-Tuning" (github.com) 一、Introduction 最近几…

Multiuser Communication Aided by Movable Antenna

文章目录 II. SYSTEM MODEL AND PROBLEM FORMULATIONA. 通道模型B. Problem Formulation III. PROPOSED SOLUTION II. SYSTEM MODEL AND PROBLEM FORMULATION 如图1所示&#xff0c;BS配置了尺寸为 N N 1 N 2 NN_{1} \times N_{2} NN1​N2​ 的均匀平面阵列&#xff08;uni…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…

logback日志配置

springboot默认使用logback 无需额外添加pom依赖 1.指定日志文件路径 当前项目路径 testlog文件夹下 linux会在项目jar包同级目录 <property name"log.path" value"./testlog" /> 如果是下面这样配置的话 window会保存在当前项目所在盘的home文件夹…

yo!这里是单例模式相关介绍

目录 前言 特殊类设计 只能在堆上创建对象的类 1.方法一&#xff08;构造函数下手&#xff09; 2.方法二&#xff08;析构函数下手&#xff09; 只能在栈上创建对象的类 单例模式 饿汉模式实现 懒汉模式实现 后记 前言 在面向找工作学习c的过程中&#xff0c;除了基本…

查看自己电脑是arm还是x64(x86);linux操作系统识别

1、查看自己电脑是arm还是x64&#xff08;x86&#xff09; linux 参考&#xff1a; https://liuweiqing.blog.csdn.net/article/details/131783851 uname -a如果输出是 x86_64&#xff0c;那么你的系统是 64 位的 x86 架构&#xff08;通常我们称之为 x64&#xff09;。如果…

【annie/lux 快速下载哔哩哔哩视频】全网最简单,只需要5步!!!

1.首先 现在annie更名为lux 官网地址&#xff1a;https://github.com/iawia002/lux/releases 2.进入官网之后如图所示 3.下载lux软件 4.下载lux 这里需要说明一下 如果不下载这个的话也可以下载视频 但是视频和音频是分开的&#xff0c;你的视频没有声音 5.下载视频

Hive 主要内容一览

Hive架构 用户接口&#xff1a;Client CLI&#xff08;command-line interface&#xff09;、JDBC/ODBC(jdbc访问hive) 元数据&#xff1a;Metastore 元数据包括&#xff1a;表名、表所属的数据库&#xff08;默认是default&#xff09;、表的拥有者、列/分区字段、表的类型&am…

面试150 位1的个数 位运算

Problem: 191. 位1的个数 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 Code public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n){int res 0;while (n ! 0){res 1;n & n - 1;// 把最后…

Python(SQLite)executescript用法

SQLite 数据库模块的游标对象还包含了一个 executescript() 方法&#xff0c;这不是一个标准的 API 方法&#xff0c;这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用&#xff0c;它可以执行一段 SQL 脚本。 例如&#xff0c;如下程序使用 executescr…