错误处理函数和多进程与多线程预习

错误处理函数和多进程与多线程预习,第1张

错误处理函数和多进程与多线程预习 错误处理函数: 封装目的:
在server.c编程过程中突出逻辑,将出错处理与逻辑分开,可以直接跳转man手册。

【wrap.c】                                         【wrap.h】

存放网络通信相关常用  自定义函数                    存放 网络通信相关常用  自定义函数原型(声明)。
命名方式:系统调用函数,处理出错场景。
                如:Listen()、Accept();
函数功能:调用系统函数,处理出错场景。
在server.c和client.c中调用  自定义函数

联合编译 server.c  和  wrap.c 生成server
                client.c  和  wrap.c  生成client

readn:

 - 读 N个字节

readline:

 - 读一行
多进程并发服务器:server.c
1.Socket();        创建  监听套接字lfd
2.Bind();            绑定地址结构Struct sockaddr_in addr;
3.Listen();                
4.

while(1)                
            cfd=Accpet();                接收客户端连接请求。
            pid=fork();
            if(pid==0){                    子进程read(cfd)----小-》大——write(cfd)
                    close(lfd)                关闭用于建立连接的套接字lfd
                    read()                       
                    小---大
                    write()
            }else if (pid>0){
                    close(cfd);            关闭用于与客户端通信的套接字cfd
                    contiue;
            }
}
5.子进程:
	* 
close(lfd)
	* 
read()
	* 
小--大
	* 
write()


 父进程:
	* 
close(cfd);
	* 
注册信号捕捉函数:    SIGCHLD
	* 
在回调函数中,完成子进程回收
	* 
            while(waitpid());


多线程并发服务器:server.c
1.Socket();        创建  监听套接字lfd
2.Bind();            绑定地址结构Struct sockaddr_in addr;
3.Listen();  
4.

while(1){
        cfd=Accept(lfd,);
        pthread_create(&tid,NULL,tfn,NULL);
        pthread_detach(tid);    //pthead_join(tid, void**);    新线程--专用于回收子线程。
}
5.子线程:

void *tfn(void *arg)
{
        close(lfd)                    不能关闭。主线程要使用lfd
        read(cfd)
        小--大
        write(cfd) 
        pthread_exit((void*)10);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存