Unix网络编程
学无止境丶
https://github.com/fwdhz998。深度学习的副产品就是广度学习。
展开
-
Linux:统计文件词频
#!/bin/bash #Name: word_freq.sh #Description: Find out frequency of words in a file if [ $# -ne 1 ]; then echo "Usage: $0 filename"; exit -1 fi filename=$1 egrep -o转载 2017-02-28 21:12:32 · 3246 阅读 · 0 评论 -
epoll底层实现过程
1 epoll一种网络模式,采用的是 IO多路复用技术(就是可以监控多个文件描述符),相比较于select 和poll是非常快的;首先看这三个函数:1 int epoll_create(int size);2 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);3 int epo转载 2017-03-05 16:29:11 · 5223 阅读 · 0 评论 -
Unix网络编程中5种网络模型
1.同步阻塞迭代模型同步阻塞迭代模型是最简单的一种IO模型。其核心代码如下:12345678bind(srvfd);listen(srvfd);for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(clifd,buf,...); //从客户端读取数据 dosomthingonbuf(buf转载 2017-03-05 16:50:50 · 476 阅读 · 0 评论 -
同步线程:条件变量与互斥锁
一。互斥量和条件变量简介 互斥量(mutex)从本质上说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁以后,任何其他试图再次对互斥锁加锁的线程将会阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为运行状态的线程可以对互斥锁加锁,其他线程将会看到互斥锁依然被锁住转载 2017-03-06 11:00:17 · 240 阅读 · 0 评论 -
TCP/IP“优雅地”打开与断开套接字。
一。当进程是会话的领头进程时setsid()调用失败并返回(-1)。setsid()调用成功后,返回新的会话的ID,调用setsid函数的进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离。由于会话对控制终端的独占性,进程同时与控制终端脱离。pid_t pid = fork(); //fork a processif (pid if (pid > 0) exit(原创 2017-03-20 09:27:29 · 1324 阅读 · 0 评论 -
利用条件变量和互斥锁实现读写锁
//具体参阅:《Unix网络编程》卷2,进程间通信。利用条件变量和互斥锁实现读写锁。struct pthread_rwlock_t{ pthread_mutex_t rw_mutex; //每一步获取读写锁,都要两次操作,上锁和解锁。每一步释放读写锁,也要两次操作,上锁和解锁。 pthread_cond_t rw_condreaders; pthread_cond_t原创 2017-03-23 10:16:58 · 730 阅读 · 0 评论 -
5种服务器网络编程模型
1.同步阻塞迭代模型同步阻塞迭代模型是最简单的一种IO模型。其核心代码如下:[cpp] view plain copybind(srvfd); listen(srvfd); for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(cl原创 2017-10-08 20:40:06 · 9146 阅读 · 0 评论