编程模型 Socket的实质就是一个接口,利用该接口,用户在使用不同的网络协议时,操作函数得以统一。而针对不同协议的差异性操作,则交给了Socket去自行解决。 TCP编程模型 UDP编程模型 时间: 2024-10-14 02:17:38
时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是格林威治时间(Greenwich Mean Time, GMT). Calendar Time:日历时间,是用一个标准时间点(1970年1月1日0点)到此时所经过的秒数来表示的时间. #include <stdio.h> #include <time.h> #include <sys/time.h> void main(){ //获取日历时间 time_t ctime; tim
第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 <time.h> 1.1.5 返回值 成功:日历时间失败:-1 1.1.6 参数说明 t:不为空的情况下保存返回值 1.2 获取格林威治时间 1.2.1 函数名 gmtime 1.2.2 函数原形 struct tm *gmtime(const time_t *timep) 1.2.3 函数功
为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make menuconfig配置方法 1.菜单项的分类 processor type and features 处理器类型 networking support 网络协议支持 device drivers 设备驱动支持 file systems
IP协议结构 UDP协议结构 TFTP协议结构 TFTP端口 读写请求端口: 69 其他请求端口:1024~65535 主程序 /******************************************************************** *名称:menu *参数: * none *返回: * none *功能:菜单命令 *********************************************************************/ voi
server.c #include <sys/socket.h> #include <netinet/in.h> #include <strings.h> #include <stdio.h> #define SERVER_PORT 3333 void main(){ //创建标识 int serverfd; serverfd = socket(AF_INET, SOCK_STREAM, 0); //建立TCP连接 //绑定地址 struct sockadd
进程同步 一组并发进程进行相互合作.相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 进程同步与进程互斥 进程同步问题的关键在于生产者不需要获取信号量,消费者不需要释放信号量,所以信号量的初值设置为0.但是进程互斥问题中双方都需要获取和释放信号量,所以信号量的初值至少为1. producor.c #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unist
信号量分类 1.二值信号量:信号量的值只能或0或1. 2.计数信号量:信号量的初始值大于1. 什么是键值 1.文件通过文件名来打开文件,从而得到文件的标示符:信号量通过键值来打开信号量,从而得到信号量的标示符. 2.在创建信号量的时候指定键值. 指定键值 1.选择任意数值 2.通过函数构造,例如:key_t ftok(char *fname, int id) 键值构造函数 key_t ftok(char *fname, int id) 通过文件名取出内核中对应的数值,然后与项目ID组合形成键值.
系统调用 函数实现体在内核空间,提供给应用程序来使用,就是一个系统调用. 工作流程 1.通过软中断(swi)从用户空间切换到内核空间.entry-common.S中的ENTRY(vector_swi)是用来处理软中断的.系统调用通常从r7寄存器中取出系统调用编号. 2.通过系统调用编号从系统调用表中找出调用的系统调用函数.也是是calls.S文件中找出系统调用编号对应的函数. 实现系统调用 1.打开.../kernel/printk.c,添加系统调用函数 void sys_iprint(){ p
网络发包模型 1.选择路由 2.交给邻居子系统(路由中紧挨着发送方的网关).如果没有邻居信息,那么由Linux中的邻居子系统来建立邻居信息. 发送数据过程 //系统调用层和协议无关层 1.发送入口sock_aio_write 2.调用do_sock_write 3.调用__sock_sendmsg //网络协议栈 4.调用udp_sendmsg 5.调用ip_route_output_flow(选择路由) 6.调用udp_push_pending_frames 7.调用ip_push_pendi