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