UNIX高级环境编程
文章平均质量分 84
本专栏记录了在学习《UNIX环境高级编程》过程中的知识点,方便自己学习,也方便其他人查阅,有不足之处敬请指出。让自己在学习中进步,在进步中学习。
逆风微积分
目前从事Android系统框架层开发工作
展开
-
epoll 解析
epoll 实际上是 poll 的一种改进,它可以处理大批量的句柄。而 poll 又是 select 的一种改进。在 select 中对所打开的文件描述符个数有一定的限制,该限制由 FD_SETSIZE 设置(一般为 1024 或 2048), 而且内核中的 select 的实现是采用轮询来处理描文件描述符集,因此效率低。当文件描述符集中的某个描述符处于可读、可写或异常状态时,select 采用内存拷贝方法通知用户空间。因此, 在 select 模型中文件描述符个数受限且效率低的问题就很明显。为了解决 se原创 2015-01-15 21:51:23 · 3066 阅读 · 0 评论 -
《unix高级环境编程》终端 I/O——终端 IO 基本概述
本文是对终端IO的基本描述,终端主要是标识符的使用,只有在实践中才能够进一步理解。原创 2014-11-22 16:08:46 · 2930 阅读 · 2 评论 -
《unix高级环境编程》进程间通信—— UNIX 域套接字
UNIX 套接字可在用一台机器上实现进程间通信,比因特网域套接字的效率更高。UNIX与套接字提供和数据报两种接口,UNIX域数据报服务是可靠的,就不会丢失消息也不会传递出错。UNIX域套接字是套接字和管道之间的混合物。为了创建一对非命名的,相互连接的UNXI域套接字,用户可以使用socketopair函数。原创 2014-11-21 21:22:35 · 1802 阅读 · 0 评论 -
《unix高级环境编程》进程间通信——基于 STREAMS 的管道
前面介绍的《管道进程间通信》是半双工管道,本届原创 2014-11-21 20:39:44 · 2048 阅读 · 0 评论 -
《unix高级环境编程》套接字——套接字选项
套接字机制有两种套接字选项接口来原创 2014-11-21 17:36:28 · 1244 阅读 · 0 评论 -
《unix高级环境编程》套接字——基于 socket 的编程
客户端:/* 基于TCP协议面向连接的客户端进程 */#include "apue.h"#include #include #include #include "connectre.h"/* 地址的最长大小 */#define MAXADDRLEN 256/* 缓冲区大小 */#define BUFLEN 128/* 外部函数定义,该函数功能是实现套接字连接 *//原创 2014-11-20 20:10:37 · 2275 阅读 · 2 评论 -
《unix高级环境编程》套接字——数据传输
前一章节记录的套接字的连接《套接字基本操作》,建立连接原创 2014-11-20 10:34:10 · 1484 阅读 · 0 评论 -
《unix高级环境编程》套接字——套接字基本操作
将套接字与地址绑定原创 2014-11-19 19:56:05 · 1341 阅读 · 0 评论 -
《unix高级环境编程》套接字——套接字基本描述
在前面部分介绍的:管道、FIFO、消息队列、信号量和共享内存都是同一台计算机上的进程间通信,本节介绍的套接字是可以实现不同计算机之间的远程进程间通信。套接口是网络进程的 ID,在网络中每一个节点都有一个网络地址,也就是 IP 地址,两个进程间通信时,首先要确定各自所在网络节点的网络地址。但是,网络地址只要确定进程所在的计算机,由于一台计算机上同时可能有多个网络进程,所以仅凭网络地址还不能确定是网络中的哪一个进程,因此套接口中还需要其他信息,也就是端口。在一台计算机中,一个端口号只能分配给一个进程,所以,进程原创 2014-11-19 10:52:37 · 1543 阅读 · 0 评论 -
《unix高级环境编程》进程间通信——共享内存
共享内存是允许两个或多个进程共享同一块内存区域原创 2014-11-18 16:13:11 · 2015 阅读 · 0 评论 -
《unix高级环境编程》进程间通信——信号量
这里所介绍的信号量是一种原创 2014-11-17 20:13:09 · 1839 阅读 · 1 评论 -
《unix高级环境编程》进程间通信——消息队列
消息队列是消息的链接表,保存在内核,通过消息队列的引用标识符来访问消息,消息队列对每个消息指定了特定的消息类型,接收消息的进程可以请求接收下一条消息,也可以请求接收下一条特定类型的消息。原创 2014-11-17 16:12:52 · 1627 阅读 · 0 评论 -
《unix高级环境编程》进程间通信——管道和FIFO
管道是早期 UNIX 系统的 IPC 机制,并且所有的 UNIX 系统原创 2014-11-16 20:12:09 · 1742 阅读 · 0 评论 -
《unix高级环境编程》进程间通信——进程间通信概述
进程通信(IPC)是处理一个多进程系统中原创 2014-11-16 16:07:34 · 1277 阅读 · 0 评论 -
《unix高级环境编程》高级 I/O—— 存储映射 I/O
存储映射 I/O 使一个磁盘文件与存储空间中原创 2014-11-16 11:29:38 · 1232 阅读 · 0 评论 -
《unix高级环境编程》高级 I/O—— readv 和 writev 函数
当我们想要一次性对一个文件进行读、写多个非连续的原创 2014-11-15 21:00:27 · 2342 阅读 · 0 评论 -
《unix高级环境编程》高级 I/O—— I/O 多路复用
当我们想要多次对描述符进行 read原创 2014-11-15 20:00:20 · 1150 阅读 · 0 评论 -
《unix高级环境编程》高级 I/O——STREAMS(流)
STREAMS(流)是系统 V 提供的构造内核设备驱动程序和原创 2014-11-15 17:43:11 · 1700 阅读 · 0 评论 -
《unix高级环境编程》高级 I/O——记录锁
当多个进程在 UNIX 系统中,原创 2014-11-15 10:47:13 · 1161 阅读 · 0 评论 -
《unix高级环境编程》高级 I/O——非阻塞 I/O
非阻塞I/O使我们可以调用 open、write和read 这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则立即出错返回,表示该操作若继续执行将阻塞。对于一个给定的文件描述符由以下两种方法可以对其指定非阻塞I/O:若调用open 获得描述符,则可指定O_NONBLOCK标志;对已打开的描述符,可以使用fcntl,由该函数打开O_NONBLOCK文件状态标志;测试原创 2014-11-15 08:56:37 · 1270 阅读 · 0 评论 -
《unix高级环境编程》线程控制——线程和 fork
多线程的父进程调用 fork 函数创建子进程时,原创 2014-11-14 16:18:20 · 1047 阅读 · 0 评论 -
《unix高级环境编程》线程控制——线程与信号
当线程被创建时,它会继承进程的掩码原创 2014-11-14 11:01:40 · 997 阅读 · 0 评论 -
《unix高级环境编程》线程控制——线程取消选项
线程的取消选项有两种:可取消状态、可取消类型原创 2014-11-13 22:44:41 · 898 阅读 · 0 评论 -
《unix高级环境编程》线程控制——线程私有数据
进程中的所有线程都可以访问进程的整个地址空间,一个线程真正拥有的唯一私有存储是处理器寄存器,甚至栈地址也能被共享,底层实现也没有阻止这种访问。但处理线程私有数据的函数可以提高线程间数据的独立性,维护基于每个线程的数据。在什么时候需要使用这种机制呢?在需要一个变量时,如果所有线程共享相同的值,则可以使用静态或外部数据,就像在单线程程序中那样,但通常需要互斥量来同步跨越多个线程对共享数据的存取原创 2014-11-13 21:40:02 · 910 阅读 · 0 评论 -
《unix高级环境编程》线程控制——同步属性
在前面章节介绍的《线程同步》都是默认属性,原创 2014-11-13 19:51:37 · 1055 阅读 · 0 评论 -
《unix高级环境编程》线程控制——线程属性
在创建新的线程时,我们可以使用系统默认的属性,也可以自己原创 2014-11-13 16:58:28 · 1002 阅读 · 0 评论 -
《unix高级环境编程》线程——线程同步
这篇文章介绍了线程同步的知识,包括互斥锁、读写锁和条件变量,并给出了相关的代码实现。原创 2014-11-12 21:05:40 · 1366 阅读 · 2 评论 -
《unix高级环境编程》线程——线程终止
在进程中,若调用了函数 exit,原创 2014-11-10 18:32:38 · 1242 阅读 · 0 评论 -
《unix高级环境编程》线程——线程基本概述
线程的基本概念原创 2014-11-10 10:27:22 · 1065 阅读 · 0 评论 -
《unix高级环境编程》信号——abort、system和sleep函数
abort函数 abort函数的功能是使异常终止,此函数将SIGABRT信号发送给调用进程,让进程捕捉SIGABRT信号目的是在进程终止之前由其执行所需的清理操作。默认情况是终止调用进程。可以采用sigaction和kill函数来实现abort,程序如下:system函数 POSIX.1要求system函数忽略SIGINT和SITQUIT信号,阻塞SIGCHLD。采原创 2014-11-09 21:51:32 · 1453 阅读 · 0 评论 -
《unix高级环境编程》信号——sigsuspend 函数
更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞,使用这种技术可以保护不希望由信号中断的代码临界区。如果希望对一个信号解除阻塞,然后pause等待以前被阻塞的信号发生,将如何呢?假定信号是SIGINT,实现这一点的一种不正确的方法是:原创 2014-11-09 20:16:54 · 1017 阅读 · 0 评论 -
《unix环境高级编程》信号——sigsetjmp 函数和 siglongjmp 函数
setjmp和longjmp函数用于非局部跳转,在信号处理程序中经常调用longjmp函数以返回到程序的主循环中,而不是从该处理程序返回。但是调用longjmp有一个问题,当捕捉到一个信号时,进入进行处理函数,此时当前信号被自动加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断该信号处理程序。如果用longjmp跳出信号处理程序,那么对此进程的信号屏蔽字会发生什么呢?POSIX原创 2014-11-09 17:18:51 · 2308 阅读 · 1 评论 -
《unix环境高级编程》信号——sigaction 函数
sigaction 函数sigaction 函数原创 2014-11-09 16:12:42 · 1122 阅读 · 0 评论 -
《unix高级环境编程》信号——信号集
信号集信号集是表示多个信号的数据类型原创 2014-11-09 10:56:59 · 1036 阅读 · 0 评论 -
《unix高级环境编程》信号——信号发送与捕获
kill 函数和 raise 函数kill 函数是将信号原创 2014-11-08 22:45:30 · 1078 阅读 · 0 评论 -
《unix高级环境编程》信号——信号基本概述
信号基本概念信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递原创 2014-11-08 20:52:18 · 1278 阅读 · 0 评论 -
《unix高级环境编程》进程关系——控制终端、作业控制和守护进程
僵尸进程与孤儿进程僵尸进程:先于父进程终止,但是父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源)。消灭僵尸进程的唯一方法是终止其父进程。孤儿进程:该进程的父进程先于自身终止。其特点是PPID=1(init进程的ID)。一个孤儿进程可以自成孤儿进程组。文中用到的缩写PID = 进程ID (由内核根据延迟重用算法生成)PPID = 父进程ID(只能由内核修改原创 2014-11-08 16:07:11 · 2048 阅读 · 0 评论 -
《unix高级环境编程》进程关系——会话
会话会话是一个或多个进程组的集合原创 2014-11-08 11:37:07 · 1217 阅读 · 0 评论 -
《unix高级环境编程》进程关系——进程组
在UNIX 系统中,每个进程除了自己的进程ID原创 2014-11-08 11:07:08 · 987 阅读 · 0 评论 -
《unix高级环境编程》进程控制——进程时间
进程时间/* 进程时间 *//* * 函数功能:获取进程的时间:墙上时钟时间、用户CPU时间和系统CPU时间; * 返回值:若成功则返回流逝的墙上时钟时间(单位:时钟滴答数),若出错则返回-1; * 函数原型: */#include clock_t times(struct tms *buf);/* * struct tms 结构如下: */struc原创 2014-11-07 20:32:18 · 970 阅读 · 0 评论