1.Linux 基础
目录结构 文件类型 文件权限 命令
1)/etc /boot /bin /home /lib /proc /usr /dev mnt
2)-普通文件 d目录文件 p管道文件 l链接文件 c,b设备文件 s套接字文件
3)权限 chmod , r:4 w:2 x:1 文字设定法 数字设定法
u 属 g 组 o 其他
命令:ls -l(显示权限)
命令:chmod u+x a.c (给文件a.c的属加x权限)
4)文件:cd,touch,mkdir,cp,rm,mv,cat,more,less,tail,head,find,grep,tar
进程:ps -ef, top ,& (放后台),jobs,
vi/vim 用户管理 su
2.gcc /g++ gdb 调试 makefile
main.c
预编译 编译 汇编 链接
gcc -E main.c -o main.i
gcc -S main.i -o main.s
gcc -c main.s -o main.o
gcc -o main main.o
四句合一:gcc -c main.c main.o
3.makefile/Makefile 管理工程 make
vi makefile(代码如下)
all:main
main:main.o add.c max.o
(tab键)gcc -o main main.o add.o max.o
main.o:main.c
(tab键)gcc -c main.c
add.o:add.c
gcc -c add.c
max.o:max.c
gcc -c max.c
clean:
rm -rf *.o main
4. gdb调试 多线程 多进程,编译加上 -g 包含调试信息
调试的是可执行文件(gdb main)
命令:gcc -o mian mian.c -g ,gdb main
l(显示十行代码)
l 2(保证显示第2行的代码)
l add.c:1(去add.c的第1行)
b 3(给刚才显示的代码中第3行加断点)
b max(给max.c的文件中加断点)
r(运行)
p(打印)
n(下一行)
bt(现在运行到哪里,函数调用栈关系)
s(进入函数)
finish(退出方法)
q(退出)
threads
thread id(多线程调试)
5.库文件 :存放的是预先编译好的方法集合 头文件 (.h): /usr/include/
可执行程序: /bin /usr/bin 库文件:/lib /usr/lib
静态库:libxx.a 复制过来
共享库:libxx.so 标记一下,不复制 ldd查看可执行程序用到了哪些共享库
静态库:命令: ar crv libxxx.a add.o max.o *.o
【crv:c创建库,r把方法添加到库里,v显示信息】
库的使用编译命令:gcc -o main mian.c -L/home/stu/mydir0228 -lfoo
(-L后加路径,链接的时候到这个路径下找,-l后加静态库库名)
生成共享库命令:gcc -shared -fPIC -o libxxx.so *.o
【-fPIC:与代码位置无关】
库的使用编译命令:gcc -o main mian.c -L/home/stu/mydir0228 -lfoo
(-L后加路径,链接的时候到这个路径下找,编译的时候找不到,-l后加静态库库名)
命令: ldd main 查看可执行程序用到了哪些共享库
一般应该把库放在标准路径下,不在的话用命令拷贝到/usr/lib下。
用管理员身份拷贝命令:mv libfoo.so /usr/lib
6.进程3个基本状态:就绪 运行 阻塞
main.c存放在磁盘中,运行的时候,将io中磁盘上拷贝到内存上,然后执行命令,正在运行的命令,就是进程。
操作系统
进程 并发(同段时间,交替进行) 并行(同时进行,多个处理器)
7.复制进程 fork 替换进程 exec 僵死进程 信号 kill() signal()
(q) 15 (强制结束) 9 (复制) 2 sigint (子进程结束给父进程发送)17sigchld
输入命令查看信号意义:vi /usr/include/bits/signum.h
fork + exec 新进程
文件描述符 open write read clone 父进程打开的文件,子进程也可以共享访问。
8.进程间通信:管道 共享内存 消息队列 套接字 信号量(多个进程)
管道:有名和无名管道的区别,写入的数据在内存中,半双工
9.线程: 同步方法:信号量(一个进程中的多个线程用的)( 二值信号量 计数信号量)
互斥锁 条件变量 读写锁
线程安全:同步 可重入函数 strtok strtok_r
Ps -eLF 【L显示出线程信息】
10.网络:分层 :应用层 传输层 网络层 数据链路层
ip MAC 端口号 网络协议:http(应用) tcp(传输) ip(网络) arp(数据链路)
Tcp/udp编程流程
Tcp :面向连接的,可靠的,流式服务
(面向连接:三次握手,四次挥手)
(可靠:应答确认,超时重传,滑动窗口,流量控制)
(流式服务:多个send(),可能一起发送,会发生粘包)
Udp :无连接的,不可靠的,数据报
状态转移图 TIME_WAIT 存在的意义:
1.可靠的终止TCP连接
2.迟来的报文能被识别并被丢弃。
客户端的connect()时候发生三次握手
listen(sockfd,5) linux:已完成三次握手的长度
Unix:已完成+未完成的长度
多线程 多进程 处理并发
http协议 www.baidu.com
端口号ip:80
长连接:1次连接,多次请求
200:成功
500:服务器错误
400:客户端错误 403 404
11.Select
2 = select() (2代表总共有两个描述符)
n == -1失败
n ==0 超时
n > 0 有n个描述符有事件
select过程:
本文是自己学习的笔记,都是重点,但是没有特别详细,可根据本文继续学习,一起加油。