shell编程
eg1,简单输出
#!/bin/bash
echo "hello world"
var="qu ni ma"
echo $var
for file in $(ls /home/txdy827/share/);do // 输出目录下的文件和目录
echo "${file}"
done
输出如下
hello world
qu ni ma
555.txt
888.c
first
samba例子文件.txt
eg2,求和
#!/bin/bash
sum=0
for i in {0..100};do // 循环数,中括号,小括号不行 中间两个英文点
let sum+=i // let 不要不写 ,不需要分号
done
echo $sum
eg3, 输出本机所在ip网段的各个ip是否开机
ping -h // 显示用法
txdy827@ubuntu:~/share/first$ ping -c 2 192.168.0.10 // -c ping 的次数
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=128 time=1.29 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=128 time=2.63 ms
txdy827@ubuntu:~/share/first$ ping -c 2 -i 3 192.168.0.10 // -i 间隔 按秒计算
PING 192.168.0.10 (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=128 time=1.78 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=128 time=2.57 ms
shell脚本
1 #!/bin/bash
2 # 192.168.52.143
3 for k in {1..254};do
4 ping -c 2 -i 0.5 192.168.52.$k
5 # ping -c 2 -i 0.5 192.168.52.$k &>/dev/null // 其他信息打印到文件,屏幕只显示那一段话
6 if[$? -eq 0]; then
7 echo "192.168.52.$k is up"
8 else
9 echo "192.168.52.$k is down"
10 fi
11 done
练习:获取本机ip地址,并赋值变量,备用
#!/bin/bash
var=$(ifconfig |grep inet | grep -v inet6 | grep -v 127 |sed 's/^[ \t]*//g' | cut -d ' ' -f2)
echo $var
ifconfig |grep inet //获取inet会好几行
ifconfig |grep inet | grep -v inet6 | grep -v 127 // 把其他多余的行去掉
ifconfig |grep inet | grep -v inet6 | grep -v 127 |sed 's/^[ \t]*//g' | cut -d ' ' -f2
// 由于 linux 中得到的信息的最前面不是制表符而是空格,所以加上了 sed 's/^[ \t]*//g' 来清除开头的空格
eg4、状态机实现文件内单词数量的统计
// 使用状态机实现文件内单词数量的统计
#include<stdio.h>
#define OUT 0 //单词外
#define IN 1 // 单词内
#define INIT OUT //开始的状态是在单词外
int count_word (char * filename) //计算文本中出现的单词的数量
{
int status=INIT;
int word=0;
FILE *fp= fopen(filename,"r"); // 只读打开
if(fp == NULL) return -1;
char c;
while((c=fgetc(fp)) !=EOF) //读到文件最后
{
if((' '== c) ||('\n'==c)||('\t'==c)) //非单词
{
status=OUT;
}
else if(OUT == status)
{
status =IN;
word++;
}
}
return word;
}
int main(int argc,char * argv[])
{
if(argc<2) return -1; //至少有两个参数,第一个是路径,第二个是命令行参数
int summ=0;
summ= count_word(argv[1]);
printf("%d\n",summ);
return 0;
}
编译执行
~/share$ gcc -o new0002 New0002.c
~/share$ ./new0002 ./555.txt
//结果
223
TCP/IP
1、TCP如何保证有序的?
2、ARP
3、TCP的拥塞控制
4、TCP的半连接队列,全链接对列
5、TCP粘包与分包
6、网络断了,TCP怎么处理
7、TCP的长连接,与短连接
8、TCP的11个状态迁移
9、send返回正数,是不是成功了?
10、阻塞与非阻塞,send,recv -1
协议栈是啥?
特定的沟通模式。分层的思想,每层都有对应的协议,一起构成的协议组,栈结构,
物链网传话,表应
自己实现一个 NtyTCP
用户态协议栈:把tcp协议做的和应用程序一样,使用
网卡属于那一层?
网卡不是通信协议,不属于任何一层。
数据链路层:数字信号
物理层:光电信号
网卡完成数字信号和光电信号的转换,D/A->A/D->D/A
柔性数组 零长数组
应用在:
1、对于数组的长度不清楚
2、提前分配好的
3、通过计算可以算出来数组长度
网卡---------------------------------->协议栈-------------------------------------->应用程序
********sk_buff:(车)运输信息 -------****receive:从内核(协议栈)获取数据到应用程序中,send反方向把数据从应用程序发到协议栈
协议栈常驻内存
netmap:网卡存储映射到 内存的 新的框架
还有DPDK框架
pr_ring框架