ImageVerifierCode 换一换
格式:PPT , 页数:321 ,大小:3.60MB ,
资源ID:2123199      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2123199.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络编程与分层协议设计.ppt)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络编程与分层协议设计.ppt

1、第第1章章TCP/IP网络编程基础网络编程基础TCPIP互联网互联网IEIE浏览器浏览器浏览器浏览器QQQQQQQQ2TCPIP网络协议栈网络协议栈传输层传输层(TCP,UDP)网络层网络层(IP)数据链路层数据链路层(Ethernet,)物理层物理层应用层应用层(HTTP,FTP,SMTP,)LinuxkernelLinuxkernelUserspaceUserspace3IP地址和端口地址和端口源源源源IPIP、源端口、目的、源端口、目的、源端口、目的、源端口、目的IPIP和目的端口和目的端口和目的端口和目的端口 4客户机客户机/服务器编程模型服务器编程模型ServerServer程序程序

2、程序程序 ClientClient程序程序程序程序activeopenconnectionactiveopenconnection5循环式服务器循环式服务器6并发式服务器并发式服务器7第第2章章Linux下下C编程环境编程环境进程进程n一个正在运行的程序称为进程一个正在运行的程序称为进程intmain()intmain()printf(“Helloworld!n”);printf(“Helloworld!n”);return0;return0;task_struct9进程标识进程标识task_structtask_structtask_structpid_1pid_1pid_2pid_2pid

3、_Npid_Npid_tpid_t pidpid=getpid();getpid();pid_tpid_tppidppid=getppid=getppid();();10创建进程创建进程初始进程fork初始进程继续执行新进程返回新进程pid返回0pid=fork();switch(pid)case-1:/*Error*/case0:/*子进程子进程*/default:/*父进程父进程*/11进程终止进程终止n进程执行进程执行exitn进程的进程的main函数执行函数执行returnn进程收到了无法处理的信号进程收到了无法处理的信号n n$kill-sSIGKILL28393$kill-sSIG

4、KILL2839312僵死进程僵死进程intmain()intmain()pid_tchild_pid;pid_tchild_pid;child_pid=child_pid=forkfork();();/*/*创建子进程创建子进程创建子进程创建子进程*/if(if(child_pidchild_pid0)0)sleepsleep(60);(60);/*/*父进程休眠父进程休眠父进程休眠父进程休眠6060秒秒秒秒*/elseelseexit(0);exit(0);/*/*子进程立即退出子进程立即退出子进程立即退出子进程立即退出*/return0;return0;$ps-a-opid,ppid,s

5、=state,command$ps-a-opid,ppid,s=state,commandPIDPPIDstateCOMMANDPIDPPIDstateCOMMAND 311628333S./zombie311628333S./zombie 31173116Zzombie31173116Zzombie 313227018Rps-a-o313227018Rps-a-o13子进程退出的异步善后处理子进程退出的异步善后处理 pid_twait(int*stat_loc);pid_twait(int*stat_loc);pid_twaitpid(pid_tpid,int*stat_loc,intopt

6、ions);pid_twaitpid(pid_tpid,int*stat_loc,intoptions);返回值返回值返回值返回值:已结束运行的子进程已结束运行的子进程已结束运行的子进程已结束运行的子进程idid代表成功,代表成功,代表成功,代表成功,-1-1代表失败代表失败代表失败代表失败WNOHANGWNOHANGvoidsigchld_handler(intsigno)voidsigchld_handler(intsigno)/*/*等待已退出的所有子进程等待已退出的所有子进程等待已退出的所有子进程等待已退出的所有子进程*/dodopid=pid=waitpidwaitpid(-1,&s

7、tatus,(-1,&status,WNOHANGWNOHANG););while(pid0);while(pid0);14线程线程n线程可以看作是比进程粒度更小的可调度执线程可以看作是比进程粒度更小的可调度执行单元,存在于进程中行单元,存在于进程中n一个进程的多个线程一个进程的多个线程共享共享进程的地址空间和进程的地址空间和文件描述符文件描述符task_structthread1thread1threadnthreadn15线程标识线程标识n每个线程有一个标识,类型为每个线程有一个标识,类型为pthread_t,只在所属的进程中有效,不具备全局性只在所属的进程中有效,不具备全局性task_s

8、tructthread1thread1threadnthreadnintpthread_equal(pthread_ttid1,pthread_ttid2);intpthread_equal(pthread_ttid1,pthread_ttid2);pthread_tpthread_self(void);pthread_tpthread_self(void);16创建线程创建线程intintpthread_createpthread_create(pthread_t*restrict(pthread_t*restrictthreadthread,constpthread_attr_t*rest

9、rictattr,constpthread_attr_t*restrictattr,void*(*void*(*start_routinestart_routine)(void),)(void),void*restrictarg);void*restrictarg);threadthread,新创建线程,新创建线程,新创建线程,新创建线程attrattr,线程属性,默认可用,线程属性,默认可用,线程属性,默认可用,线程属性,默认可用NULLNULLstart_routinestart_routine,新创建线程的线程函数,新创建线程的线程函数,新创建线程的线程函数,新创建线程的线程函数arga

10、rg,向线程函数提供的运行参数,可以为一个结构,向线程函数提供的运行参数,可以为一个结构,向线程函数提供的运行参数,可以为一个结构,向线程函数提供的运行参数,可以为一个结构体指针,以便传递多个参数体指针,以便传递多个参数体指针,以便传递多个参数体指针,以便传递多个参数17终止线程终止线程-1n一个进程中任何一个线程调用一个进程中任何一个线程调用exit,_Exit或或_exit,都将导致整个进程终止,都将导致整个进程终止n当线程收到一个默认为终止进程的信号时也将当线程收到一个默认为终止进程的信号时也将导致整个进程的终止导致整个进程的终止n一个线程可以通过下面三个方式退出,而不会一个线程可以通过

11、下面三个方式退出,而不会造成整个进程的终止造成整个进程的终止n线程在线程函数中执行线程在线程函数中执行returnn线程被同一进程的其他线程执行线程被同一进程的其他线程执行pthread_canceln线程执行线程执行pthread_exit18终止线程终止线程-2#include#includevoidvoidpthread_exitpthread_exit(void*ptr);(void*ptr);ptrptr为一为一为一为一voidvoid指针,与传给启动线程的参数类似,指针,与传给启动线程的参数类似,指针,与传给启动线程的参数类似,指针,与传给启动线程的参数类似,进程中的其他线程可以通

12、过调用进程中的其他线程可以通过调用进程中的其他线程可以通过调用进程中的其他线程可以通过调用pthread_joinpthread_join函函函函数访问该指针数访问该指针数访问该指针数访问该指针19终止线程终止线程-3#include#includeintintpthread_cancelpthread_cancel(pthread_tthread);(pthread_tthread);intintpthread_joinpthread_join(pthread_tthread,void*ptr);pthread_tthread,void*ptr);pthread_cancelpthread_

13、cancel函数用来取消一个线程的执行函数用来取消一个线程的执行函数用来取消一个线程的执行函数用来取消一个线程的执行 pthread_joinpthread_join函数用来等待线程的终止,因此除非被指定的线程已函数用来等待线程的终止,因此除非被指定的线程已函数用来等待线程的终止,因此除非被指定的线程已函数用来等待线程的终止,因此除非被指定的线程已经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束运行运行运行运行N

14、ULLNULL表示对线程表示对线程表示对线程表示对线程返回码不感兴趣返回码不感兴趣返回码不感兴趣返回码不感兴趣20线程示例thread.c-1typedefunsignedlongu32;typedefunsignedlongu32;pthread_tpthread_tntidntid;/*/*线程标识线程标识线程标识线程标识*/voidprintids(constchar*);voidprintids(constchar*);void*void*runrun(void*);(void*);/*/*线程函数线程函数线程函数线程函数*/intmain()intmain()interr;inter

15、r;err=err=pthread_createpthread_create(&(&ntidntid,NULL,run,NULL);,NULL,run,NULL);if(err!=0)if(err!=0)printids(mainthread:);printids(mainthread:);sleep(1);sleep(1);return0;return0;21线程示例thread.c-2 voidprintids(constchar*s)voidprintids(constchar*s)pid_tpid;pid_tpid;pthread_ttid;pthread_ttid;pid=pid=g

16、etpidgetpid();();/*/*获得进程标识获得进程标识获得进程标识获得进程标识*/tid=tid=pthread_selfpthread_self();();/*/*获得线程自身标识获得线程自身标识获得线程自身标识获得线程自身标识*/printf(%spid%utid%u(0 x%x)n,s,printf(%spid%utid%u(0 x%x)n,s,(u32)pid,(u32)tid,(u32)pid,(u32)tid,(u32)tid);(u32)tid);void*run(void*arg)void*run(void*arg)printids(newthread:);printids(newthread:);return(void*)0);return(void*)0);/*/*线程执行线程执行线程执行线程执行returnreturn退出,但进程并不退出退出,但进程并不退出退出,但进程并不退出退出,但进程并不退出*/22线程示例thread.c-3$gccthread.c-othread-std=gnu99-lpthread$gccthread.c-othread-s

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1