Linux网络编程
CKJiang
未来不迎,过往不念,当下不杂
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
recv_peek偷窥函数和UNIX域间文件描述符传递sendmsg、recvmsg
/** * recv_peek - 仅仅查看套接字缓冲区数据,但不移除数据 * @sockfd: 套接字 * @buf: 接收缓冲区 * @len: 长度 * 成功返回>=0,失败返回-1 */ssize_t recv_peek(int sockfd, void *buf, size_t len){while (1){int ret = recv(soc原创 2013-09-25 20:28:07 · 1907 阅读 · 0 评论 -
线程详解
说到线程,就得先来认识一下进程。所谓进程,就是电脑已执行程式的实体,是资源竞争的基本单位。线程:在一个程序里的一个执行路线,是一个进程内部的控制序列。它是程序执行的最小单位。线程间共享进程的数据,但是以下数据是自己各自有一份的:线程ID栈优先级errno错误状态一组寄存器线程的优点:1、创建一个新线程的代价要比创建一个新进程小得多2、与进程之间的原创 2013-09-27 22:23:02 · 972 阅读 · 0 评论 -
linux网络编程之POSIX信号量、自旋锁、读写锁
posix信号量system v 信号量只能用于进程间同步,而posix信号量除了可以进程间同步,还可以线程间同步。systemv 信号量每次PV操作可以是N,但Posix信号量每次PV只能是1。除此之外,posix信号量还有命名和匿名之分(man7 sem_overview):1、命名信号量 名字以/somename形式分辨,只能有原创 2013-09-26 15:15:38 · 1944 阅读 · 0 评论 -
posix 线程和pthread 系列函数
一、posix 线程概述进程在各自独立的地址空间中运行,进程之间共享数据需要用进程间通信机制,有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比如实现一个图形界面的下载软件,一方面需要和用户交互,等待和处理用户的鼠标键盘事件,另一方面又需要同时下载多个文件,等待和处理从多个网络主机发来的数据,这些任务都需要一个“等待-处理”的循环,可以用多线程实现,一个线程专门负责与用户原创 2013-09-27 23:06:19 · 2320 阅读 · 0 评论 -
epoll与select、poll区别和五种I/O模型
epoll与select、poll区别:1、epoll不会随着监听fd数目的增加而降低效率,因为它是基于回调的,只关心“活跃”的fd,与fd的数目无关;而select和poll采用的是轮询的方式处理,每一次都需要遍历全部fd,所以fd的数目越多,它们的效率越低。2、内核 / 用户空间 内存拷贝问题,如何让内核把 fd消息通知给用户空间呢?在这个问题上select/poll采取了原创 2013-10-29 21:23:50 · 1568 阅读 · 0 评论 -
linux下epoll如何实现高效处理百万句柄的--原理剖析
linux下epoll如何实现高效处理百万句柄的本文转自:http://russelltao.iteye.com/blog/1405347开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epo转载 2013-11-11 16:43:54 · 1010 阅读 · 0 评论 -
linux epoll练习(客户端)
#include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(E原创 2015-03-19 08:33:04 · 739 阅读 · 0 评论 -
linux 线程练习
#include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(EXIT_FAILURE); \ } whil原创 2015-03-19 08:39:52 · 889 阅读 · 0 评论 -
互斥锁使用(生产者和消费者)
#include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(EXIT_FAILURE); \原创 2015-03-19 22:05:34 · 947 阅读 · 0 评论 -
linux网络编程之POSIX条件变量
条件变量:当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。例如一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这种情况就需要用到条件变量。 条件变量函数:pthread_cond_initpthread_cond_destroypthread_cond_waitpthread_cond_signal原创 2013-09-26 15:19:12 · 1256 阅读 · 0 评论 -
linux网络编程之POSIX共享内存
shm_open函数:功能:用来创建或打开一个共享内存对象原型int shm_open(const char *name, int oflag, mode_t mode); 参数name:共享内存对象的名字oflag:与open函数类似,可以是O_RDONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_TRUNC等。mode:此参数总是需要设置,如果原创 2013-09-26 15:12:43 · 1173 阅读 · 0 评论 -
封装函数设置I/O的阻塞模式和非阻塞模式
/** * activate_noblock - 设置I/O为非阻塞模式 * @fd: 文件描符符 */void activate_nonblock(int fd){int ret;int flags = fcntl(fd, F_GETFL);//记住fcntl函数,很好用,常给文件加解锁用if (flags == -1)ERR_EXIT("fcntl");原创 2013-09-25 20:36:30 · 1252 阅读 · 0 评论 -
readn、readline与writen
因为TCP是基于流的传输,会产生粘包现象,为解决这个问题,重新封装了read和write函数,以后要用可以直接调用。/** * readn - 读取固定字节数 * @fd: 文件描述符 * @buf: 接收缓冲区 * @count: 要读取的字节数 * 成功返回count,失败返回-1,读到EOF返回 */ssize_t readn(int fd, void *bu原创 2013-09-25 20:21:39 · 1256 阅读 · 0 评论 -
封装read、write、accept、connect函数,实现超时操作。
学习linux网络编程的时候,看视频学习,封装了一些可以直接拿来用的函数,方便以后查找。/** * read_timeout - 读超时检测函数,不含读操作 *@fd: 文件描述符 *@wait_seconds: 等待超时秒数,如果为0表示不检测超时 * 成功(未超时)返回0,失败返回-1,超时返回-1并且errno = ETIMEDOUT */int read_tim原创 2013-09-25 20:15:31 · 4508 阅读 · 5 评论 -
消息队列、共享内存、信号量简介
IPC(Inter-Process Communication,进程间通信)对象数据结构:内核为每个IPC对象维护一个数据结构structipc_perm { key_t __key; /* Key supplied to xxxget(2) */ uid_t uid; /* Effective UID o原创 2013-09-26 14:44:52 · 1587 阅读 · 0 评论 -
Linux网络编程之System V消息队列
System V消息队列函数:#include#include#includeintmsgget(key_t key, int msgflg);intmsgctl(int msqid, int cmd, struct msqid_ds *buf);intmsgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)原创 2013-09-26 14:50:20 · 1590 阅读 · 0 评论 -
linux网络编程之System V共享内存
内存映射文件示意图:mmap函数:功能:将文件或者设备空间映射到共享内存区。原型void*mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);参数addr:要映射的起始地址,通常指定为NULL,让内核自动选择len:映射到进程地址空间的字节数prot:映射区保护方式f原创 2013-09-26 14:58:32 · 1149 阅读 · 0 评论 -
linux网络编程之System V信号量
信号量集结构:struct semid_ds { struct ipc_perm sem_perm; /* Ownership and permissions */ time_t sem_otime; /* Last semop time */ time_t sem_ctime; /* Last change time */ uns原创 2013-09-26 15:02:21 · 1306 阅读 · 0 评论 -
linux网络编程之POSIX消息队列
POSIX IPC名字限定:必须以/打头,并且后续不能有其它/ ,形如/somename长度不能超过NAME_MAX 通过下面的命令将消息队列挂载到/dev/mqueue下,可通过cat/dev/mqueue/name查看消息队列状态mount -t mqueue none /dev/mqueuemq_open函数:功能:用来创建和访问一个消息队列原型mqd_t原创 2013-09-26 15:09:52 · 1750 阅读 · 0 评论 -
linux epoll 练习(服务器端)
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef std::vector EventList;#define ERR_EXI原创 2015-03-18 23:43:38 · 830 阅读 · 0 评论
分享