linux系统编程复习基本框架待填充Word文档格式.docx
《linux系统编程复习基本框架待填充Word文档格式.docx》由会员分享,可在线阅读,更多相关《linux系统编程复习基本框架待填充Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
系统调用3:
函数库调用
5.errno与perror
四、第二单元linux下C语言开发工具
1.vim工作模式及转换
三种工作模式及转换
2.gcc工作过程及常用方法:
预处理、编译、汇编、连接
连接关键
3.makefile
作用:
通过make命令调用makefile文件,通过makefile文件描述源程序之间的相互依赖关系,并自动维护编译工作
内容
编写简单的
make默认执行第一条规则
伪目标
OBJ1=S1
$(OBJ1)
1)显示规则
2)$@$^
4.库的概念
库函数,由系统提供的,供程序员开发时调用的,完成特定功能的函数。
编译执行
静态.a加入到可执行文件可执行文件
共享.so独立于可执行文件可执行文件+库
五、第三单元linux进程存储管理
1.程序的结构:
代码区、数据区、未初始化数据区BSS
2.进程的结构:
代码区、数据区、未初始化数据区BSS、堆、栈
3.环境变量
1)查看,增加,修改,删除
2)命令方式
(1)查看变量
A.Set列出所有环境变量
B.Echo$变量名列出指定环境变量
(2)增加或修改export变量名=变量值(=两边无空格)
(3)删除unset变量名
名=值
临时修改
永久修改:
写文件
所有用户识别/etc/profile
某一个用户识别~/.bash_profile
3)函数方式
函数方式只需知道是干什么用的,或者说到功能知道用哪个函数
(1)查看变量:
Lgetenv(“名”)
(2)删除变量:
unsetenv
(3)增加或修改setenvputenv
4.时间管理
1)时间表示方法
(1)time_t
从1970年1月1日午夜开始计数的秒数值,与系统直接进行交互的类型
(2)结构体structtm
将UTC时间根据当前设计的时区进行分解
(3)字符串
2)时间转换
3)时间函数
时间的三种表示方法
转换:
三个函数
time_tt1;
t1=time();
printf(“%s”,ctime(&
t1));
structtm*p1=localtime(&
t1)
六、第四单元linux文件及目录管理
1.理解ANSIC与POSIX文件I/O区别
2.ANSIC缓冲区,缓冲区类型
全缓冲:
缓冲区满、进程正常结束、手动调用刷新函数
行缓冲:
终端I/O
无缓冲:
标准错误
3.文件描述符
0标准输入
1标准输出、2标准错误输出
得到文件描述符:
open、pipe、socet、accept
4.POSIX文件I/O
1)openclosereadwritelseek
2)sync/fsync/fdatasync不需要编程,只需要知道概念和区别
sync是将内核缓冲区中所有的内容刷新到磁盘上
fsync是将内核缓冲区和某个文件有关的内容刷新到磁盘上
fdatasync是将内核缓冲区和某个文件有关的数据内容刷新到磁盘上
5.目录文件基本操作
1)opendirclosedirreaddirchdir(chdir不做考核)
七、第五单元文件属性管理
1.linux文件系统管理
虚拟文件系统的作用
2.linux系统下文件类型及属性
1)linux文件类型及权限,16bit
2)类型种类及判断
3)理解setuid、setgid、sticky
4)文件访问权限判断
3.linux文件属性管理
1)修改文件权限操作
2)修改系统umask值——理解umask作用
3)修改文件的拥有者及组
4)用户名/组名与UID/GID的转换
5)硬连接文件与符号连接文件——掌握区别必考
八、第六单元linux进程管理与程序开发
1.基本概念
1)基本属性:
各种id的意义和相关函数
2)用户属性:
四种用户相关id的意义和函数
2.进程控制
1)fork/vfork
vfork中知道为什么不知道vfork就可以
2)exec
3)wait/waitpid
4)exit/_exit
_exit知道和exit的区别就可以
3.特殊进程
1)孤儿进程
2)僵死进程
九、第七单元linux多线程编程
1.线程与进程的区别、选择
2.线程函数
1)创建pthread_create,等待pthread_join
2)退出pthread_exit,取消pthread_cancel
获取id,pthread_self
这几个知道是哪个就可以
一十、第八单元进程间通信
1.进程间通信方式(6种)
2.管道
1)连接一个进程的输出至另一个进程的输入的一种方法
2)单向,无名(进程本身或亲缘进程)、有名(FIFO无关进程)
3)掌握无名管道父子进程操作
3.信号
1)用于通知接收进程有某种事件发生
2)处理方法
3)signal(信号值,处理方法)
kill
4.信号量
1)一个计数器,用来记录对某个资源的使用情况
5.共享内存
1)允许多个进程访问同一块内存空间
6.消息队列
1)消息的链表,链表中每个节点包括消息类型和正文两部分
一十一、第九单元linux网络编程
1.肯定不考编程
2.常用命令和配置文件
1)常用命令
(1)查看IP/子网掩码:
ifconfig
(2)网关:
route–n
(3)测试主机:
ping<
IP>
(4)查看主机名:
hostname
2)配置文件(不用记)
(1)主机名
(2)IP/掩码/网关
(3)DNS
3.OSI七层、TCP/IP四层协议
OSI七层协议:
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP四层协议:
网络接口层、网络层、传输层、应用层
4.IP和端口代表意义
5.理解数据包封包和拆包过程
6.cs、bs,字节顺序,面向连接/无连接
1)C/S客户端/服务器
(1)优点:
发挥客户端PC处理能力,客户端处理工作后提交给服务器,客户端响应较快
(2)缺点
A.客户端需安装专用软件,软件安装、升级、维护的工作量大
B.不同的操作系统很难运行同一款客户端软件
2)B/S浏览器/服务器
客户机软件只需浏览器,只需实现简单事物逻辑
(2)缺点:
客户端功能简单,绝大部分工作由服务器承担,负担重,数据查询慢,不适合大数据量分析,实时控制等
3)字节顺序
主机字节顺序:
网络字节顺序:
低高高低大端
主机和网络之间的转换
4)面向连接/无连接
7.套接字类型
1)流式套接字基于TCP协议,面向连接,可靠
2)数据报套接字基于UDP协议,无连接,不可靠
3)原始套接字超级用户使用,对网络下层通信协议进行访问
8.TCP套接字通信过程图
9.UDP套接字通信过程图
1fork创建子进程,返回值的意义。
2子进程对父进程空间采用写时复制copyonwrite技术进行拷贝。
什么是写时复制技术?
3编程:
父进程输出hello,子进程输出world。
1线程与进程的关系,以及如何选择
一个进程至少包括一个线程
进程拥有资源,线程使用资源
同一个进程内多个线程共享进程资源
稳定---多进程
通信方便,时空开销小---多线程
2线程的创建pthread_create
void*f(void*arg)
{
//线程执行的函数
}
main()
pthread_ttid;
pthread_create(&
tid,NULL,f,NULL);
3等待某个线程结束。
取消其他线程,获取线程tid,
线程退出
pthread_join
pthread_cacel
pthread_self
pthread_exitexit
1Linux支持的进程间通信方式6
信号管道IPC(消息队列,信号量,共享内存)socket
单向,占用内存空间,独立的文件系统
2无名管道创建以及参数代表的意义
intpipe(intpfd[2])
pfd[0]--读
pfd[1]写
3父子进程使用无名管道进行通信的过程
父进程创建管道
创建子进程
子进程共用一个管道
关闭不用的管道描述符
intpfd[2],num;
charbuf[20];
pid_tid;
pipe(pfd)
id=fork();
if(id==-1)perror("
fork"
);
elseif(id==0){//关闭不用的描述符然后进行读或写
close(pfd[1]);
num=read(pfd[0],buf,sizeof(buf))
write(1,buf,num);
close(pfd[0]);
}
else{//关闭不用的描述符然后进行读或写
write(pfd[1],"
hello"
5);
4dup/dup2功能以及区别
将一个文件描述符(新)复制一个现有的文件描述符(旧)上,指向现有的打开文件表项
dup新--最小可用文件描述符
dup2新--通过参数指定,若已经占用,则自动关闭重新使用
dup(旧)
dup2(旧,新)
5实现输入重定向,将标准输入改成文件/home/t1
intfd=open("
/home/t1"
O_RDWR);
dup2(fd,0);
dup2(fd,1);
1OSI参考模型七层,TCP/IP四层
应用层表示会话传输层网络层数据链路物理
应用传输网络网络接口
2IP地址和端口作用
标识主机
表示主机上应用程序
协议IP端口----三元组
协议本地IP本地端口目标IP目标端口
---五元组
3字节顺序分类意义
大于一个字节的数据类型在网络上传输涉及到字节顺序问题。
little小端低字节低地址高字节高地址
big大端低高高低
大
小大
htonl(32位)htons(16位)
ntohlntohs
IP地址32
端口16
字符串
4套接字类型
流式传输层TCP
数据报传输层UDP
原始IP协议只能root使用
5CSBS意义区别
客户端服务器----客户端处理
浏览器服务器----服务器处理
函数返回值代表错误并且函数置相应的错误代码的时候使用
man2open
returnvalue
seterrno
perror(自定义字符串);
perror("
open"
s1.c----s1
c1.c----c1
makeclean
OBJ1=s1
all:
$(OBJ1)c1
$(OBJ1):
$(OBJ1).c
gcc-o$@$^
c1:
c1.c
clean:
rm-f$(OBJ1)c1
编译错误:
gcc提示,附近,先找第一条错
undeclared变量没声明:
写错,没声明
unreference'
字符串'
函数没定义:
写错,没实现,函数库没加
-lpthread
运行错误:
段错误
GDB
打印调试:
在程序中分布写几条printf,带\n
libc.so
libpthread.so
编译执行
静态.a加入到可执行文件可执行文件
共享.so独立于。
。
。
+库
数据段:
已经初始化全局静态
BSS:
未初始化全局静态
栈:
函数局部变量
堆:
动态内存mallocfree
intd;
inte=3;
intmain()
inta;
intb=3;
char*c=malloc(10);
staticintf;
set---所有变量
echo$名
unset名
写入文件
getenv("
名"
)
setenv(“名”,"
值"
?
?
putenv(“名=值”)
unsetenv("
time_t---197011000秒数
structtm---分开保存
字符串——固定格式TueDec12:
3:
42010
printf("
%s"
ctime(&
t1);
得到文件描述符
openpipesocketaccept
ls-l文件类型符号
-
d
c
b
p
l
s
s1-->
f1
stat第一个参数是文件名
fstat第一个参数是文件描述符
获取s1属性时,得到的是f1
-----------------
lstat
获取s1属性时,得到的是s1
修改权限
chmod/fchmod/lchmod
修改用户/组
chown/fchown/lchown
影响新建文件/目录的权限
0033
命令--------
目录:
777&
屏蔽字反码
000101100
反111010011
111111111
-----------------------
111010011
744
文件:
666&
函数--------
fopenopenmkfifo
参数中权限项&
uid---用户名
getpwuid
gid---组名
getgrgid
获取本身getpid
父进程getppid
进程组getpgid
会话getsid
整数----名SIG*
kill(pid,sig)
alarm(3);
非阻塞
sleep(3);
阻塞,结束:
时间到,收到信号
执行系统默认动作
捕捉
忽略
signal(信号值,处理方法)
SIG_IGN
SIG_DFL
函数名(参数int返回值void*)
主机字节顺序
网络字节顺序big
htonlhtons
实现"
cpf1f2"
功能
执行"
openreadwriteclose
main(intargc,char*argv[])
char*cmd[3];
cmd[0]="
ls"
;
cmd[1]="
-a"
cmd[2]=NULL;
pid=fork();
pid<
0error;
pid>
0wait(NULL);
pid==0execvp(cmd[0],cmd);