随笔分类 -  APUE专题

APUE总结
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_ 阅读(704) 评论(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_ 阅读(2783) 评论(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_ 阅读(905) 评论(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_ 阅读(1590) 评论(0) 推荐(0) 编辑

Chapter 9 进程关系
摘要:1.终端登录登录过程:内核--->init[进程ID=1]--->(fork)init--->(exec)getty--->(exec)--->login登录结束过程:进程1=init->登录shell<->终端设备驱动程序<->使用终端的用户2.网络登录如下图3.进程组1).每个进程属于一个进程组,这个进程组从同样的终端获得信号 函数getpgrp返回调用进程的进程组ID,结果也用pid_t表示:#include <unistd.h>pid_t getpgrp(void);//返回调用进程的进程组ID。2)SUS定义ge 阅读全文

posted @ 2012-08-03 20:25 as_ 阅读(610) 评论(2) 推荐(0) 编辑

Chapter 8 进程控制
摘要:1.进程标识符要点:1).每个进程都有一个非负整型表示的唯一的进程ID。因为进程ID是一个总是唯一的,常将其用作其他标示符的一部分以保证其唯一性。例如:应用程序有时包含进程ID作为文件名的一部分,来产生唯一的文件名。2).虽然唯一,但是进程ID可以重用3).进程ID 0通常是调用进程,常常称为对换程序(swapper)。在硬盘上没有对应于这个进程的程序,它是内核的一部分而被熟知为一个系统进程。进程ID 1通常是init进程,在启动过程结束后被内核调用。下列函数返回这些标识符:#include <unistd.h>pid_t getpid(void); ... 阅读全文

posted @ 2012-08-03 17:33 as_ 阅读(528) 评论(0) 推荐(0) 编辑

Chapter 7 进程环境
摘要:1.main函数C函数总是从执行一个名为main的函数开始。main函数的原型为int main(int argc, char *argv[]); 其中 argc是命令行参数的数量而,argv是参数指针的数组。2.进程终止有8种方法终止一个进程。普通终止有5种:1).从main函数中返回;2).调用exit;3).调用_exit或_Exit;4).最后线程从启动例程(eg:start函数)返回;5).从最后线程里调用pthread_exit异常终止有3种:6).调用abort7).收到一个信号8).最后线程回应一个取消请求Exit 函数三个普通终止程序的函数:_exit和_Exit从内核立即返 阅读全文

posted @ 2012-08-03 14:26 as_ 阅读(357) 评论(0) 推荐(0) 编辑

Chapter 6 系统数据文件和信息
摘要:1.口令文件出于安全考虑,用户登录密码在/etc/shadow文件中加密。由spwd结构描述,加密是one-way加密算法,意思是你不能通过加密后的密码得出原密码,而只能通过原密码去验证是否正确,提供了相似的访问函数。但是shadow中的用户加密密码是不可读出的。1).POSIX.1只定义了两个获取口令文件相的函数。在给出用户登录名或者数值用户ID,这两个函数允许我们通过查找相关项#include <pwd.h>struct passwd *getpwuid(uid_t uid);struct passwd *getpwnam(const char *name);//两者成功都返回 阅读全文

posted @ 2012-08-03 13:04 as_ 阅读(627) 评论(0) 推荐(0) 编辑

Chapter 5 标准I/O库
摘要:1.流和FILE对象对于国际字符集,一个字符可以由一个以上的字节来表示。标准I/O文件流可以用来操作单字节和多字节(宽,wide)字符集。一个流的方向(orientation)决定了字符是以单字节还是多字节的方式读取,当一个流被创建时,它没有方向。如一个多字节I/O函数(见<wchar.h>)用在了没有方向的流上,那么流的方向会设为面向宽字符的。如果一个字节I/O函数用在一个没有方向的流上,那么流的方向会设为面向字节的。只有两个函数可以在设置后改变这个方向。freopen函数(简单说明)将会清除一个流的方向,而 fwide函数用来设置一个流的方向。#include <stdi 阅读全文

posted @ 2012-08-03 11:46 as_ 阅读(756) 评论(0) 推荐(0) 编辑

Chapter 4 文件和目录
摘要:1.stat、fstat和lstat函数获取一些文件相关的信息。函数原型:#include <sys/stat.h> int stat(const char *restrict pathname, struct stat *restrict buf); //提供文件名字,获取文件对应属性。int fstat(int filedes, struct stat *buf); //通过文件描述符获取文件对应的属性。int lstat(const char *restrict pathname, struct stat *restrict b... 阅读全文

posted @ 2012-08-02 21:00 as_ 阅读(839) 评论(0) 推荐(0) 编辑

Chapter 3 文件I/O
摘要:1.文件描述符文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时候,内核向进程返回一个文件描述符。Unix系统shell使用文件描述符0与进程的标准输入相关联,文件描述符1与进程的标准输出相关联,文件描述符2与进程的标准出错相关联,在POSIX标准中,幻数0、1、2应当替换为符号常量STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,另外文件描述符变化范围:0~OPEN_MAX,现在很多系统将OPEN_MAX置为632.open函数调要open函数可以打开或创建一个文件。函数原型#include <fcnt1.h>int open(cons 阅读全文

posted @ 2012-08-01 18:49 as_ 阅读(696) 评论(0) 推荐(0) 编辑

Chapter 1 Unix基础知识
摘要:以下仅列出相对比较重要的内容1.文件和目录1).文件系统 Unix文件系统是目录和文件组成的一种层次结构。目录是一个包含许多目录项的文件,而逻辑上,可以认为每个目录项都包含着文件名。文件属性是指文件类型(是普通文件还是目录)、文件的大小、文件的所有者、文件权限以及文件的修改时间等等。如获取相应信息可以用stat和fstat函数2).文件名3).路径名由斜线和文件名组成的序列构成路径名,以斜线开头的路径名称为绝对路径名,否则为相对路径名。注:文件根系统的名字(/)是个特殊的绝对路径,不含文件名4).工作目录 每一个进程都有一个工作目录(又称当前工作目录),所有绝对路径名都从工作目录开始2.输入和 阅读全文

posted @ 2012-08-01 14:19 as_ 阅读(614) 评论(0) 推荐(0) 编辑

导航