一、相关时间函数 1. gettimeofday() 2. time() 3. clock() 二、间隔定时器 1. setitimerval() 2. getitimerval() 3. 实时定时器的使用 三、为阻塞操作设置超时 1. alarm() 2. 给read()设置读超时 一、相关时间函数 1. gettimeofday() 获取日历时间。 #include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz); timeval结构体 struct timeval { time_t tv_sec; // 秒 suseconds_t tv_usec; // 微秒(long int) }; 2. time() 返回自Epoch(格林威治标准时间1970.01.01 0:00 继续阅读 >>


王良 18/08/23 09:43:00
1. 基础介绍   最通用的I/O函数,只要设置好参数,read、readv、recv、recvfrom和write、writev、send、sendto等函数都可以对应换成这两个函数来调用。同时,各种输出函数调用也可以替换成sendmsg调用。 #include <sys/socket.h> ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssizt_t sendmsg(int sockfd, struct msghdr *msg, int flags); 大部分参数都在 msghdr结构中 struct iovec { /* Scatter/gather array items */ void *iov_base; /* Starting address */ size_t iov_len; /* Number of bytes to transfe 继续阅读 >>


刘生玺 18/08/22 20:28:00
Preface 总结一下TCP连接的三次握手过程,连接释放的四次挥手过程,以及其原生的缺陷引起的SYN Flood的简单介绍。 目录 Preface 目录 TCP连接建立——三次握手 几个概念 三次握手过程 为什么是三次握手? 缺陷引起的SYN Flood SYN Flood 攻击 SYN Flood 防护措施 TCP连接释放——四次挥手 挥手过程 为什么建立连接是三次握手,关闭连接却是四次握手? 为什么TIME_WAIT状态还需要等2MSL? 关闭TCP连接一定需要4次挥手吗? TCP连接建立——三次握手 几个概念 seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。此外序号是循环使用的 ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建立后所有的传送报文段都必须要 继续阅读 >>


冯鑫 18/08/22 00:28:55
一、被中断的系统调用(EINTR)的理解 1. 慢系统调用是? 2. 慢系统调用的类别 3. EINTR产生的原因 5. 一般处理方法 二、SIGCHLD信号的处理 1. SIGCHLD信号的产生 2. SIGCHLD信号的处理 3. 不处理SIGCHLD的后果 三、示例代码 一、被中断的系统调用(EINTR)的理解 1. 慢系统调用是? 慢系统调用指可能永远阻塞的系统调用。 也就是处于阻塞状态的系统调用,如果不收到需要的信息,就会一直阻塞在那里。例如accept:在服务器等待客户端建立连接时,如果没有客户端来请求连接,那么accept就会一直阻塞,直到有客户端请求连接为止。像这种系统调用,就称为慢系统调用。 2. 慢系统调用的类别 对管道的读写 对终端设备设备的读写 对网络连接的读写 …… 值得注意的是,读写磁盘文件一般不会阻塞,一般会返回给调用者(在没有硬件故障的条件下) 3. EINTR产生的原因 当阻 继续阅读 >>


王良 18/08/20 15:11:16
终端输入 sudo netease-cloud-music 但是这意味着终端不能关闭, 而且每次都要这样实在是麻烦, 发现是 sudo, 那肯定是权限问题了, 所以只要更改网易云的执行权限就好了 打开 /usr/share/applications 目录, 在下面找到网易云 ( netease-cloud-music.desktop ) 更改其执行权限sudo chmod 777 netease-cloud-music.desktop (每个人都有读和写以及执行的权限) 重启 OK了 作者:weixin_36888577 发表于 2018/08/20 11:28:51 原文链接 https://blog.csdn.net/weixin_36888577/article/details/81868462 继续阅读 >>


吕子健 18/08/20 11:28:51
引入 与很多高校一样,西安皇家邮电大学一直钟爱于正方教务管理系统。 前一段时间爬了学校的旧版的教务系统,旧版主页 想了解更多请点击这里:爬取学校教务系统获取学生信息 不知道学校是不是把装空调的拿去买新教务系统了,新教务系统主页 可以看出,学校用的仍然是正方教务系统,不过版本升级了,新教务系统是用Java写的后台,前端用了Bootstrap框架。与旧系统相比,界面美观大方,易用性也明显提高。 准备 模拟登陆前,我们首先要清楚需要提交那些数据。 打开F12,我们在访问主页时,除了加载了JS的HTML还向服务器发送了一个get请求。 直接访问它可以获取一个json: {"exponent":"AQAB","modulus":"AIMNm8zi5XkWLRDUy7w6bjypS+d8ng7an00UYH8UZMhUvrDAvpuifsFu+rU6dmMFQHpHGo9ZlyEy9GWy6ev3s8ro15869OIKo\/nwexEnb8AD0DO7NaV9jzDjqRj 继续阅读 >>


李猛 18/08/20 10:00:19
引入 前一段时间爬了学校的旧版的教务系统,想了解更多请点击这里:爬取学校教务系统获取学生信息 旧版教务系统主页 不知道学校是不是把装空调的拿去买新教务系统了,新教务系统主页 可以看出,学校用的仍然是正方教务系统,不过这是新的版本。新教务系统是后台是用Java写的,前端用了Bootstrap等,比就系统好看多了,易用性也明显提高。 准备 模拟登陆前,我们首先要清楚需要提交那些数据。 打开F12,我们在访问主页时,除了加载了JS的HTML还向服务器发送了一个get请求。 直接访问它可以获取一个json: {"exponent":"AQAB","modulus":"AIMNm8zi5XkWLRDUy7w6bjypS+d8ng7an00UYH8UZMhUvrDAvpuifsFu+rU6dmMFQHpHGo9ZlyEy9GWy6ev3s8ro15869OIKo\/nwexEnb8AD0DO7NaV9jzDjqRjEldAs5ct9pdjo7SxQccJYfSbFbwb6206w1q4 继续阅读 >>


李猛 18/08/18 17:59:04
  unp上讲述了以下三种方法: 1.调用alarm,它在指定超时期满时将产生SIGALRM信号。 2. 使用select为函数设置超时 3.使用SO_RCVTIMEO套接字选项为函数设置超时 (1.1).使用 SIGALRM 信号为 connect设置超时 static void connect_alarm(int); int connect_timeo(int sockfd, const SA *saptr, socklen_t salen, int nsec) { Sigfunc *sigfunc; int n; sigfunc = Signal(SIGALRM, connect_alarm);//设置新的信号处理函数 if (alarm(nsec) != 0)//检测以前有没有设置过时钟,如果有就会覆盖 err_msg("connect_timeo: alarm was already set"); 继续阅读 >>


刘生玺 18/08/17 22:38:16
1. 经典“入门级”问题:IO 多路复用是什么意思? 在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流. 发明它的原因,是尽量多的提高服务器的吞吐能力。 是不是听起来好拗口,看个图就懂了.(其实就是一个时分复用)    在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流 那么,“一个请求到来了,nginx使用epoll接收请求的过程是怎样的”, 其实,ngnix会有很多链接进来, epoll会把他们都监视起来,然后像拨开关一样,谁有数据就拨向谁,然后调用相应的代码处理。 其中,“复用”指的是复用同一个线程。 其实就是操作系统为你提供了一个功能,当你的某个socket可读或者可写的时候,它可以给你一个通知,让你去处理读事件或者写事件。 而这个功能能够通过select/poll/epoll等来使用。这些函数都可以同时监视多个描述符的读写就绪状况,这样,多个描述符的 I/O 操作都能在一个线程内并发交替地顺序完成 。 2.s 继续阅读 >>


刘生玺 18/08/17 21:00:21
一、问题描述 生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多线程同步问题的经典案例。生产者生成一定量的数据放到缓冲区中,然后重复此过程;与此同时,消费者也在缓冲区消耗这些数据。生产者和消费者之间必须保持同步,要保证生产者不会在缓冲区满时放入数据,消费者也不会在缓冲区空时消耗数据。不够完善的解决方法容易出现死锁的情况,此时进程都在等待唤醒。 示意图: 二、解决方法 思路 采用某种机制保护生产者和消费者之间的同步。有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。 在生产者和消费者之间建立一个管道。管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。 解决问题的核心    保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问。 Java能实现的几种方法 wait() / noti 继续阅读 >>


李猛 18/08/16 08:40:50