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

上传人:b****2 文档编号:2123199 上传时间:2022-10-27 格式:PPT 页数:321 大小:3.60MB
下载 相关 举报
网络编程与分层协议设计.ppt_第1页
第1页 / 共321页
网络编程与分层协议设计.ppt_第2页
第2页 / 共321页
网络编程与分层协议设计.ppt_第3页
第3页 / 共321页
网络编程与分层协议设计.ppt_第4页
第4页 / 共321页
网络编程与分层协议设计.ppt_第5页
第5页 / 共321页
点击查看更多>>
下载资源
资源描述

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

《网络编程与分层协议设计.ppt》由会员分享,可在线阅读,更多相关《网络编程与分层协议设计.ppt(321页珍藏版)》请在冰豆网上搜索。

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

第第1章章TCP/IP网络编程基础网络编程基础TCPIP互联网互联网IEIE浏览器浏览器浏览器浏览器QQQQQQQQ2TCPIP网络协议栈网络协议栈传输层传输层(TCP,UDP)网络层网络层(IP)数据链路层数据链路层(Ethernet,)物理层物理层应用层应用层(HTTP,FTP,SMTP,)LinuxkernelLinuxkernelUserspaceUserspace3IP地址和端口地址和端口源源源源IPIP、源端口、目的、源端口、目的、源端口、目的、源端口、目的IPIP和目的端口和目的端口和目的端口和目的端口4客户机客户机/服务器编程模型服务器编程模型ServerServer程序程序程序程序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_Npid_Npid_tpid_tpidpid=getpid();getpid();pid_tpid_tppidppid=getppid=getppid();();10创建进程创建进程初始进程fork初始进程继续执行新进程返回新进程pid返回0pid=fork();switch(pid)case-1:

/*Error*/case0:

/*子进程子进程*/default:

/*父进程父进程*/11进程终止进程终止n进程执行进程执行exitn进程的进程的main函数执行函数执行returnn进程收到了无法处理的信号进程收到了无法处理的信号nn$kill-sSIGKILL28393$kill-sSIGKILL2839312僵死进程僵死进程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=state,command$ps-a-opid,ppid,s=state,commandPIDPPIDstateCOMMANDPIDPPIDstateCOMMAND311628333S./zombie311628333S./zombie31173116Zzombie31173116Zzombie313227018Rps-a-o313227018Rps-a-o13子进程退出的异步善后处理子进程退出的异步善后处理pid_twait(int*stat_loc);pid_twait(int*stat_loc);pid_twaitpid(pid_tpid,int*stat_loc,intoptions);pid_twaitpid(pid_tpid,int*stat_loc,intoptions);返回值返回值返回值返回值:

已结束运行的子进程已结束运行的子进程已结束运行的子进程已结束运行的子进程idid代表成功,代表成功,代表成功,代表成功,-1-1代表失败代表失败代表失败代表失败WNOHANGWNOHANGvoidsigchld_handler(intsigno)voidsigchld_handler(intsigno)/*/*等待已退出的所有子进程等待已退出的所有子进程等待已退出的所有子进程等待已退出的所有子进程*/dodopid=pid=waitpidwaitpid(-1,&status,(-1,&status,WNOHANGWNOHANG););while(pid0);while(pid0);14线程线程n线程可以看作是比进程粒度更小的可调度执线程可以看作是比进程粒度更小的可调度执行单元,存在于进程中行单元,存在于进程中n一个进程的多个线程一个进程的多个线程共享共享进程的地址空间和进程的地址空间和文件描述符文件描述符task_structthread1thread1threadnthreadn15线程标识线程标识n每个线程有一个标识,类型为每个线程有一个标识,类型为pthread_t,只在所属的进程中有效,不具备全局性只在所属的进程中有效,不具备全局性task_structthread1thread1threadnthreadnintpthread_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*restrictattr,constpthread_attr_t*restrictattr,void*(*void*(*start_routinestart_routine)(void),)(void),void*restrictarg);void*restrictarg);threadthread,新创建线程,新创建线程,新创建线程,新创建线程attrattr,线程属性,默认可用,线程属性,默认可用,线程属性,默认可用,线程属性,默认可用NULLNULLstart_routinestart_routine,新创建线程的线程函数,新创建线程的线程函数,新创建线程的线程函数,新创建线程的线程函数argarg,向线程函数提供的运行参数,可以为一个结构,向线程函数提供的运行参数,可以为一个结构,向线程函数提供的运行参数,可以为一个结构,向线程函数提供的运行参数,可以为一个结构体指针,以便传递多个参数体指针,以便传递多个参数体指针,以便传递多个参数体指针,以便传递多个参数17终止线程终止线程-1n一个进程中任何一个线程调用一个进程中任何一个线程调用exit,_Exit或或_exit,都将导致整个进程终止,都将导致整个进程终止n当线程收到一个默认为终止进程的信号时也将当线程收到一个默认为终止进程的信号时也将导致整个进程的终止导致整个进程的终止n一个线程可以通过下面三个方式退出,而不会一个线程可以通过下面三个方式退出,而不会造成整个进程的终止造成整个进程的终止n线程在线程函数中执行线程在线程函数中执行returnn线程被同一进程的其他线程执行线程被同一进程的其他线程执行pthread_canceln线程执行线程执行pthread_exit18终止线程终止线程-2#include#includevoidvoidpthread_exitpthread_exit(void*ptr);(void*ptr);ptrptr为一为一为一为一voidvoid指针,与传给启动线程的参数类似,指针,与传给启动线程的参数类似,指针,与传给启动线程的参数类似,指针,与传给启动线程的参数类似,进程中的其他线程可以通过调用进程中的其他线程可以通过调用进程中的其他线程可以通过调用进程中的其他线程可以通过调用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_cancel函数用来取消一个线程的执行函数用来取消一个线程的执行函数用来取消一个线程的执行函数用来取消一个线程的执行pthread_joinpthread_join函数用来等待线程的终止,因此除非被指定的线程已函数用来等待线程的终止,因此除非被指定的线程已函数用来等待线程的终止,因此除非被指定的线程已函数用来等待线程的终止,因此除非被指定的线程已经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束经终止了,否则调用该函数的线程将被阻塞,直到指定的线程结束运行运行运行运行NULLNULL表示对线程表示对线程表示对线程表示对线程返回码不感兴趣返回码不感兴趣返回码不感兴趣返回码不感兴趣20线程示例thread.c-1typedefunsignedlongu32;typedefunsignedlongu32;pthread_tpthread_tntidntid;/*/*线程标识线程标识线程标识线程标识*/voidprintids(constchar*);voidprintids(constchar*);void*void*runrun(void*);(void*);/*/*线程函数线程函数线程函数线程函数*/intmain()intmain()interr;interr;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-2voidprintids(constchar*s)voidprintids(constchar*s)pid_tpid;pid_tpid;pthread_ttid;pthread_ttid;pid=pid=getpidgetpid();();/*/*获得进程标识获得进程标识获得进程标识获得进程标识*/tid=tid=pthread_selfpthread_self();();/*/*获得线程自身标识获得线程自身标识获得线程自身标识获得线程自身标识*/printf(%spid%utid%u(0x%x)n,s,printf(%spid%utid%u(0x%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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

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

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