2012年8月4日

Chapter 17 高级进程间通信

摘要: 这章属于高级内容 内容比较简略1.基于STREAMS的管道流管道是一个双向(全双工)管道。单个流管道就能向父、子进程提供双向的数据流1).命名的STREAMS管道我们可以用fattach函数来在文件系统给一个STREAMS管道一个名字#include <stropts.h>int fattach(int filedes, const char *path);//成功返回0,错误返回-1。path参数必须引用一个已有的文件,调用进程必须拥有这个文件,或有对它有写的权限,或使用超级用户特权运行。一个进程可以调用fdetach来撤消STREAMS文件和文件系统里的名字之间的关联关系。#i 阅读全文

posted @ 2012-08-04 21:56 as_ 阅读(705) 评论(0) 推荐(0) 编辑

Chapter 15 进程间通信

摘要: 1.管道管道是UNIX系统IPC的最古老形式,在shell下的表现形式为管道线。每当在管道线中输入一个由shell执行的命令序列时,shell为每一条命令单独创建一进程,然后将前一条命令进程的标准输出用管道与后一条命令的标准输入相连接。管道有两个主要局限:1).管道是半双工的,即数据只能在一个方向上流动。2).管道只能在具有公共祖先的进程之间使用。管道是由调用pipe函数而创建的.#include <unistd.h>int pipe(int filedes[2]);//成功返回0,错误返回-1。经由参数filedes返回两个文件描述符:filedes[0]为读而打开,filede 阅读全文

posted @ 2012-08-04 21:06 as_ 阅读(2790) 评论(0) 推荐(0) 编辑

Chapter 14 高级I/O

摘要: 1.非阻塞I/O非阻塞I/O使我们可以调用不会永远阻塞的I/O操作,例如open,read和write。如果这种操作不能完成,则立即出错返回,表示该操作如继续执行将继续阻塞下去。对于一个给定的描述符有两种方法对其指定非阻塞I / O:(1) 如果是调用open以获得该描述符,则可指定O_NONBLOCK标志(2) 对于已经打开的一个描述符,则可调用fcntl打开O)NONBLOCK文件状态标志2.记录锁记录锁(record locking)的功能是:一个进程正在读或修改文件的某个部分时,可以阻止其他进程修改同一文件区1).fcntl记录锁下面给出fcntl函数原型#include <fc 阅读全文

posted @ 2012-08-04 18:07 as_ 阅读(711) 评论(0) 推荐(0) 编辑

Chapter 13 守护进程

摘要: 1.守护进程的特征 守护进程也称精灵进程是生存期长的一种进程,它们常常在系统引导装入时启动,在系统管比时终止。守护进程没有控制终端,所以它们是在后台运行的。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 所有守护进程都以超级用户(用户ID为0)的优先权运行。没有一个守护进程具有控制终端,控制名称设置为(?)、终端前台进程组ID设置为-1。除update以外的所有守护进程都是组的首进程,对话期的首进程,而且是这些进程组和对 阅读全文

posted @ 2012-08-04 15:43 as_ 阅读(450) 评论(0) 推荐(0) 编辑

Chapter 12 线程控制

摘要: 1.线程限制用sysconf函数可以获得和thread相关的一些系统信息,主要是线程相关的一些最大值:线程限量和sysconf的名字参数限量名描述名字参数PTHREAD_ DESTRUCTOR_ITERATIONS当一个线程退出时一个实现将尝试销毁线程相关数据的最大次数。_SC_THREAD_ DESTRUCTOR_ITERATIONSPTHREAD_ KEYS_MAX一个进程可以创建的关键字的最大数量。_SC_THREAD_ KEYS_MAXPTHREAD_ STACK_MIN可以作为一个线程栈的最少字节数。_SC_THREAD_ STACK_MINPTHREAD_ THREADS_MAX一 阅读全文

posted @ 2012-08-04 15:14 as_ 阅读(907) 评论(0) 推荐(0) 编辑

Chapter 11 线程

摘要: 1.线程概念一个线程由表示一个进程里的一个执行上下文所需的信息组成。这包括一个在进程里标识线程的线程ID、一组寄存器值、栈、调用优先级和策略、信号掩码、errno变量(1.7节)、和线程指定数据(12.6节)。在一个进程内的所有东西在进程里的线程间都可以共享,包括可执行程序的代码、程序的全局和堆内存、栈、和文件描述符。2.线程标识就像每个进程有一个进程ID一样,每个线程也有一个线程ID。进程ID在整个系统的唯一的,但线程ID不同,线程ID只在它所属的进程环境中有效1).下面一个函数被用来比较两个线程ID#include <pthreads.h>int pthread_equal(p 阅读全文

posted @ 2012-08-04 10:59 as_ 阅读(610) 评论(0) 推荐(1) 编辑

Chapter 10 信号

摘要: 1.信号概念信号是一种软件中断,通知程序某种事件的发生。常见的信号有SIGABRT(当进程调用abort函数的时候自动发送), SIGALRM(当timer被触发的时候自动发送),等等。下面的情况可以产生信号:按下CTRL+C产生SIGINT硬件中断,如除0,非法内存访问(SIGSEV)等等Kill函数可以对进程发送信号Kill命令。实际上是对Kill函数的一个包装软件中断。如当Alarm Clock超时(SIGURG),当Reader中止之后又向管道写数据(SIGPIPE),等等当信号发生的时候,可以有三种选择(称之为Disposition of the signal或者Action ass 阅读全文

posted @ 2012-08-04 00:25 as_ 阅读(1606) 评论(0) 推荐(0) 编辑

导航