
网络编程
啊啊啊西吧
写点什么呢
展开
-
getaddrinfo()函数详解
gethostbyname和gethostbyaddr这两个函数仅仅支持IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两 种转换,返回的是一个sockaddr结构的链表而不是一个地址清单。这些sockaddr结构随后可由套接口函数直接使用。如此以 来,getaddrinfo函数把协议相关性安全隐藏在这个库函数内部。应用程序只要处理由getaddrinfo函数填写的套接口地址结转载 2016-10-12 09:14:08 · 26866 阅读 · 0 评论 -
linux系统调用:exit()与_exit()函数详解
exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS);可读性比较好一点。 作为系统调用而言,_exit和exit是一对孪生兄弟,它们究竟相似到什么程度,我们可以从Linux的源码中找到答案: “_NR“是在Linux的源码中为每转载 2016-07-13 13:39:32 · 29955 阅读 · 0 评论 -
daemon守护进程中将stdin,stdout,stderr重定向到/dev/null的问题
有人认为对于后台守护进程做此类重定向操作浪费资源,建议直接关闭0、1、2号句 柄拉倒,这是非常不正确的。假设它们确实被关闭了,则一些普通数据文件句柄将等 于0、1、2。以2号句柄为例,某些库函数失败后会向2号句柄输出错误信息,这将破 坏原有数据。 1、如下代码将stdin、stdout、stderr重定向到/dev/null freopen( "/dev/null", "w", stdo原创 2016-09-19 16:29:28 · 5276 阅读 · 1 评论 -
fork()子进程复制父进程的缓冲区的一个例子
#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){ int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0;}如果你对fork()的机制比较熟悉的话,这个题并不难,输出应该是6个“-”转载 2016-07-25 15:50:42 · 1490 阅读 · 0 评论 -
多进程、多线程以及如何选择?
关于线程: 首先关于多线程多进程,看一张图: 基本上把线程,进程区别说清楚了提到线程,就不得不提线程同步的问题,我专门归纳了一篇文章: 线程同步常用方式与区别线程2个性质, 线程安全:概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 可重入:概念基本没有比较正式的完整解释,但是它比线程安全要求更严格。根据经验,所谓“重入”,常转载 2017-06-19 19:54:40 · 1509 阅读 · 0 评论 -
SIGCLD信号及配合wait的使用
SIGCHLD的语义为:子进程状态改变后产生此信号,父进程需要调用一个wait函数以确定发生了什么。 对于SIGCLD的早期处理方式如下:1、如果进程特地设置该信号的配置为SIG_IGN,则调用进程的子进程将不产生僵死进程。2、如果将SIGCLD的配置设置为捕捉,则内核立即检查是否有子进程准备好被等待,如果是这样,则调用SIGCLD处理程序。一般的,父进程在生成子进程之后会有两种情况,一种是原创 2016-08-29 09:54:18 · 1003 阅读 · 0 评论 -
互斥量(互斥锁)与条件变量
使用pthread的互斥接口来保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上来说是把锁。 条件变量是线程可用的另一种同步机制。条件变量给多个线程提供了一个会和的场所。 条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。我们使用pthread_cond_wait等待条件变量变为真。 pthread_cond_wait的内部过程: 调原创 2016-10-19 11:12:25 · 2018 阅读 · 0 评论 -
元数据
1、日志文件系统(journaling file systems)可防止系统崩溃时导致的数据不一致问题。对文件系统元数据(metadata)的更改都被保存在一份单独的日志里,当发生系统崩溃时可以根据日志正确地恢复数据。除此之外,日志使系统重新启动时不必进行文件系统的检查,从而缩短了恢复时间。 任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统转载 2016-09-19 09:32:00 · 617 阅读 · 0 评论 -
linux:select()函数详解
一.Select 函数详细介绍Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发 生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。 可是使用Se原创 2016-09-18 20:56:55 · 4800 阅读 · 0 评论 -
unix:fork()函数进阶讲解
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。转载 2016-07-19 21:12:42 · 826 阅读 · 0 评论 -
《APUE.3E》用gdb调试ftw函数(图4-22)
所谓的ftw函数,就是降序遍历文件层次结构,对各种类型的文件计数 solaris上提供的ftw函数对每一个文件都是使用stat函数,这就会使得程序跟随符号链接,造成可能会由于成环的符号链接导致的多次重复处理同一个目录的问题,下面的apue.3e中图4-22使用了lstat阻止跟随符号链接的问题。为记录自己的学习,下面代码中加上自己的部分注释以及调试过程。#include "apue.h"#inc原创 2016-07-08 16:49:42 · 1025 阅读 · 0 评论 -
spring mvc架构
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 MVC模式实现了页面展示与业务逻辑向分离,这也是解耦的重要实现方式。由于mvc模式非常常用,当前基于M转载 2017-08-07 10:51:51 · 1403 阅读 · 0 评论 -
服务器Reactor架构浅析
Reactor模式是一个架构模式,它主要解决的问题是高并发场景下的服务器的性能问题。原来的服务器与客户端的链接是一对一的,也就是说一个客户端socket接到后,对应一个线程去接收和处理,这种模式的好处,是思路很清晰,一个线程处理一个socket请求,但是这种太消耗线程资源,因为毕竟socket不是实时都有数据接入的。例如网卡属于是典型的慢速设备,因此,如何能高效的利用一些模式,可以改变这种局面,这个原创 2016-12-20 21:41:35 · 4355 阅读 · 0 评论 -
几种典型的服务器网络编程模型归纳(select poll epoll)
1、同步阻塞迭代模型 同步阻塞迭代模型是最简单的一种IO模型。其核心代码如下:bind(srvfd);listen(srvfd);for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(clifd,buf,...); //从客户端读取数据 dosomthingonbuf(buf); write(clifd,原创 2016-12-17 10:52:17 · 9947 阅读 · 5 评论 -
libev事件驱动网络库从安装到使用
上次说到的select/poll模型(传送门)的特征在于每一个执行周期都会探测一次或一组事件,一个特定的事件会触发某个特定的响应。我们可以将这种模型归类为“事件驱动模型”。 相比其他模型,使用 select() 的事件驱动模型只用单线程(进程)执行,占用资源少,不消耗太多 CPU,同时能够为多客户端提供服务。如果试图建立一个简单的事件驱动的服务器程序,这个模型有一定的参考价值。但这个模型依旧原创 2016-12-20 19:50:08 · 5100 阅读 · 0 评论 -
windows下安装Apache(欢迎留言)
下载Apache:http://httpd.apache.org/docs/current/platform/windows.html 或者:http://www.apachelounge.com/download/ 我的是win7 32位的,下载的下面这个: 解压压缩包,Apache24放到D盘根目录下 按照官方的方法先进行测试再进行安装: 1、安装Visual C++ 2008 R原创 2016-03-23 18:15:40 · 511 阅读 · 0 评论 -
Fiddler工作原理
1 fiddler抓包是在 客户端和服务器之间建立一个代理服务器,监听本机发出的请求和服务器返回的响应结果。2 启动fiddler之前,先来看一下代理服务器设置. 默认没有代理服务器。 3 启动fiddler。再次查看代理服务器设置。 Fiddler工作原理:浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器。 而Fiddler是c#开发(转载 2017-06-01 21:11:35 · 11373 阅读 · 0 评论 -
线程同步常用方式与区别
在介绍线程同步/互斥之前,我们先要理解同步与互斥的概念,引用书上的解释来说明这2个概念: 1、线程(进程)同步的主要任务 在引入多线程后,由于线程执行的异步性,会给系统造成混乱,特别是在急用临界资源时,如多个线程急用同一台打印机,会使打印结果交织在一起,难于区分。当多个线程急用共享变量,表格,链表时,可能会导致数据处理出错,因此线程同步的主要任务是使并发执行的各线程之间能够有效的共享资源和相互合原创 2017-06-20 14:02:12 · 7935 阅读 · 0 评论 -
说说多线程(linux、windows/c c++ mfc python java多线程)
一直在使用多线程,也学习过很多linux线程进程方面的知识(APUE UNP),有mfc里包装好的多线程,有python程序里的多线程,但是没有好好归纳过,现在好好整理归纳下关于多线程的知识。 关于多线程、多进程,参考:多进程、多线程以及如何选择? 关于线程同步(互斥)的方式与对比,参考:线程同步常用方式与区别 关于同步机制常使用的互斥锁、自旋锁、信号量、读写锁、顺序锁等等,参考:锁的种类与特原创 2017-06-23 18:55:06 · 2438 阅读 · 1 评论 -
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
JavaWeb: 报错信息The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path 好久不写Jsp,今天建立了一个Javaweb工程,并在eclipse中配置了Web容器Tomcat。原本开心的新建jsp页面,添加一个简单的Java类。可是,JSP页面顶端出现“红色”的报错信息:The转载 2017-08-09 09:31:00 · 454 阅读 · 0 评论 -
网络编程:epoll、accept触发模式及阻塞方式的选择
select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型即支持水平触发,也支持边缘触发,默认是水平触发 从表象看epoll的性能最好,但是在连接数少,并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多回调函数来完成。epoll工作在两种触发模式下: Level_triggered(水平触发):当原创 2016-12-27 22:39:01 · 7902 阅读 · 3 评论