
网络相关
junior19
abcde
展开
-
EPOLL高并发服务器
IO复用模型有select、poll、epoll,关于它们的区别:1.select能处理的fd数量很少,我的电脑是1024个(sizeof(fd_set)*8),而epoll的fd数量没有限制,只与内存大小有关。2.select当fd就绪时,需要将所有fd拷贝到内核态再将活跃的fd拷贝回用户态,还有遍历fd数组判断哪个是活跃的。而epoll不需要频繁的拷贝,当fd就绪时调用回调函数插入到f...原创 2019-03-02 21:22:25 · 875 阅读 · 0 评论 -
C语言多线程互斥锁
互斥锁是为了防止多个线程同时操作临界资源,下面看看用法:# include <stdio.h># include <pthread.h>pthread_mutex_t mute;int value = 0;void *fun(void *arg){ //上锁,函数是阻塞的 pthread_mutex_lock(&mute); ...原创 2019-03-04 22:56:09 · 21857 阅读 · 1 评论 -
JSON字符串解析器(unicode转utf-8)
图片和代码思路均参考:https://zhuanlan.zhihu.com/p/22731540json的字符串格式为"...",下面写个解析器来解析json的字符串也就是主要处理包含转义字符\这种情况,其中\u表示unicode字符,我们需要转成utf-8的编码格式,为什么呢?看下图将会如果unicode用上图第一列的默认编码(utf-16),将会使每一个字符至少占用两个字节,而使用...原创 2019-03-23 12:48:06 · 10303 阅读 · 0 评论 -
signal()信号测试
测试代码1:# include <stdio.h># include <error.h># include <sys/types.h># include <string.h># include <signal.h>typedef void Sigfunc(int);void sig_usr(int signo){ if...原创 2019-04-25 21:38:57 · 699 阅读 · 0 评论 -
fork()函数测试
测试代码1:# include <stdio.h># include <error.h># include <sys/types.h># include <string.h>int main(int argc, char *argv[]){ char s[] = "hello\n"; write(1, s, strlen(s));...原创 2019-04-24 14:40:52 · 355 阅读 · 0 评论 -
IO多路复用EPOLL的ET模式下EPOLLIN事件触发时机
网上说的太宏观,自己测试一下各种情况,FD为nonblock。0.客户端发送新数据过来,单线程阻塞在epoll_wait,epoll_wait返回可读事件。1.单线程阻塞在epoll_wait,客户端发送新数据过来,epoll_wait返回可读事件。2.单线程阻塞在epoll_wait,客户端发送新数据过来,epoll_wait返回可读事件开始读数据,同时客户端不再发送数据过来,并且缓...原创 2019-08-03 13:35:17 · 545 阅读 · 0 评论 -
记一次Linux C++ Segmentation fault处理
段错误有可能是重复free指针或者操作野指针,今天遇到了一个段错误bug,是由于某函数声明了返回值(应该返回一个shared_ptr),但是函数实现忘记return导致的,虽然使用这个函数时没有用到它的返回值,但是依然报错,gdb调试指向一个new语句,牛头不对马嘴,注释掉new语句后traceback指向下一个使用new的地方,所以当项目代码比较多时,调试不一定能找出来问题!段错误如果找不到原因...原创 2019-08-06 20:42:39 · 1132 阅读 · 0 评论