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

相关推荐
hjjdebug1 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯1 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
斑布斑布1 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
✿ ༺ ོIT技术༻1 小时前
Linux:认识文件系统
linux·运维·服务器
会掉头发2 小时前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★2 小时前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
饮啦冰美式2 小时前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu