I/O多路转接之select

在完成I/O操作时,程序中完成真正I/O的时间可能只有少的一部分,而大部分时间都处于一个等的时间。比如,此时需要从一个套接字中读取数据read(socket, buf, BUFSIZE); 这个操作可能会一直阻塞,直到有数据从网络的另一端发送过来。等的时间过于长,这是I/O效率低下的真正原因。可能...

2017-07-09 23:14:09

阅读数 282

评论数 0

实现简单UDP服务器客户端模型

UDP是无连接的,在数据的发送之前不需要连接,只需要知道要发数据给谁,然后将数据发出即可,可以直接接收到其他人发来的数据,不必调用listen()和accept()函数。所以UDP中建立好套接字后,就可以直接进行数据的传输。 基于UDP的接收和发送函数: #include #inc...

2017-07-04 16:51:31

阅读数 378

评论数 0

使用套接字实现简单TCP服务器客户端模型

利用套接字实现一个简单的服务器客户端模型基本步骤如下: 1.创建套接字 #include #include  int socket(int domain, int type, int protocol); 参数描述:      domian:协议域,AF_INET  ipv4, AF_IN...

2017-07-04 10:23:55

阅读数 330

评论数 0

TCP连接的建立和释放(三次握手和四次挥手)

TCP的连接建立 TCP的连接建立也称握手,握手需要在客户机与服务器之间交换三个TCP报文段,下图给出了三次握手建立连接的过程。 连接建立的详细过程: ①第一次握手 A向B发送连接请求报文段,这时连接请求报文段的首部同部位SYN=1,同时选择是一个初始序号seq=x。(TCP...

2017-06-29 00:00:11

阅读数 838

评论数 0

TCP报文的URG和PSH标志位

URG:紧急标志位,它使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中。另一端被通知这个紧急数据已被放置在普通数据流中,由接收方决定如何处理。 该标志位要和紧急指针配合使用。当URG=1时,表明紧急指针字段有效。向系统说明此报文中有紧急数据,应该尽快传送,而不是按照原来...

2017-06-28 16:21:49

阅读数 404

评论数 0

代理服务器原理

原文:http://blog.csdn.net/liangzhao_jay/article/details/12025907 代理服务器: 代理服务器(Proxy Server):代理服务器,顾名思义就是局域上不能直接上网的机器将上网请求(比如说,浏览某个主页)发给能够直接上网的代理服务器,然...

2017-06-26 01:37:20

阅读数 232

评论数 0

NAT技术

网络地址转换 NAT(Net Address Translation):它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。 NAT技术原理: NAT就是在局域网内部使用内部自己的地址,当内部主机要...

2017-06-26 00:57:59

阅读数 398

评论数 1

ARP地址解析协议原理

理解ARP协议 ARP地址解析协议,是一个很重要的协议。当一个数据帧经过多次路由到达目的网络时,路由器只能知道其数据帧中的目的IP地址,而不知目标主机的硬件地址(网络层使用的是IP地址,但是在实际网络链路上传送数据帧时,最终必须使用该网络的硬件地址),此时需要目的主机的硬件地址,就要使用ARP来...

2017-06-25 23:19:42

阅读数 4282

评论数 0

CRC校验原理及步骤

什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 ...

2017-06-22 11:59:11

阅读数 94030

评论数 26

端口号

什么是端口? 在网络中,主机之间通过TCP/IP协议发送和接受数据报,数据报根据目的主机的 IP进行路由选择。现在多数操作系统都是支持多进程同时运行的,在数据报到达主机后,主机应该将数据报交给同时运行进程中的哪一个进程?因为这个原因,所以引入了端口机制。 本地操作系统会给有需求的进程分配协议端...

2017-06-21 22:56:15

阅读数 210

评论数 0

守护进程

什么是守护进程: 守护进程是运行在系统后台的一种特殊程序,独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事件。 守护进程也称为精灵进程,有以下特点: 自成进程组,自成会话,不受一般用户注销影响在命名上一般以d结尾其本身是一个孤儿进程生命周期长,要7*24小时在线一般的网络服务器必须...

2017-06-15 23:51:15

阅读数 263

评论数 0

线程安全和可重入函数

线程安全: 一个函数被称为线程安全的,当且仅当被多个进程反复调用时,它会一直产生正确的结果。 有四类函数称为线程不安全函数: 不保护共享变量的函数函数状态随着调用改变的函数返回指向静态变量指针的函数调用线程不安全函数的函数 要确保函数线程安全,主要需要考虑的是线程之间的共享变量...

2017-06-13 11:12:39

阅读数 452

评论数 0

一个进程为什么会默认打开三个标准输入输出

这其中涉及到终端登录的问题,先对终端登录进行小总结: init在创建子进程后,子进程一直进行程序替换完成必须的处理动作,最后替换到bash,也就是我们所工作的环境,所以也就解释bash的父进程就是init,init为什么是1号进程。 从getty开始exec到login,再exec到bash,...

2017-06-11 23:05:07

阅读数 650

评论数 0

Linux子进程的异步等待方式(SIGCHLD信号)

当一个父进程创建一个子进程时,最好要调用wait或者waitpid函数等待子进程,不然会产生僵尸进程造成是内存泄漏的问题。一般父进程在等待子进程时有两种方式等待,一种是阻塞式等待,这时父进程不能处理自己的工作;另一种是以非阻塞式等待,父进程吃力自己工作的同时,要定时去查看有没有子进程等待清理。 ...

2017-06-11 11:22:31

阅读数 735

评论数 0

死锁概述

什么是死锁? 把多个进程因抢占资源,或者彼此间通信造成的一种僵局,在没有外力推动的作用下进程不能继续运行下去的这种状态称为死锁。 比如,有两个进程p1和p2,他们准备写两个文件f1和f2,两个进程并发运行: 如果p1先打开f1和f2,然后p2才去打开f1和f2,这时文件也已经被打开,...

2017-06-09 15:39:34

阅读数 216

评论数 0

Linux信号捕捉

内核是怎样实现信号的捕捉呢?处理流程如下图所示: 系统往往在从内核态切回用户态时会进行信号的处理。 信号捕捉函数: sighandler_t signal(int signum, sighandler_t handler); int sigaction(int sign...

2017-06-09 15:28:36

阅读数 270

评论数 0

Linux信号

当我们在终端运行这样的程序时 #include int main() { int count = 0; while(1) { sleep(1); printf("%d\n", count++); } } 我们可以看到每隔一秒会将...

2017-06-06 18:54:34

阅读数 191

评论数 0

Linux共享内存实现进程间通信

原理图: 通过在物理地址上开辟出一块内存,通过页表建立多个进程的虚拟内存与这块内存的映射让进程可以访问这块空间,映射一旦建立就相当于自己拥有了这块内存。 特点: 通信速度快; 生命周期随内核; 不带任何同步机制,所以常常和信号量一块使用。 共享内存的操作: 创建: int shmget...

2017-06-03 00:53:23

阅读数 210

评论数 0

Linux消息队列实现进程间通信

什么是消息队列: 消息队列提供了从一个进程向另一个进程发送一个有类型数据块的方法。用这种方法可以避免命名管道的同步和阻塞问题。消息队列是基于消息的,而管道是基于字节流的,并且消息队列的读取不一定是先入先出。 消息队列的操作: 消息队列的创建或者获取: int msgget(key_t key,...

2017-06-02 23:58:53

阅读数 1004

评论数 0

Linux信号量

【信号量】 本质:信号量本质就是一个计数器,用于统计临界资源数目的计数器,信号量是用来调协进程 对共享资源的访问。 【信号量的工作原理 】 由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的: P(sv):如果sv的值大于零,就给它减1;如果它的...

2017-06-02 17:02:26

阅读数 262

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭