
APUE
文章平均质量分 86
sicofield
这个作者很懒,什么都没留下…
展开
-
IO多路转换
1.引言 当从一个文件描述符读,然后写到另一个文件描述符,可以在下列形式的循环中使用阻塞IO。while ((n = read(STDIN_FILENO, buf,BUFSIZ)) > 0) if(write(STDOUT_FILENO, buf, n) != n) err_sys("writeerror"); 这种形式的阻原创 2013-07-17 20:38:03 · 2657 阅读 · 0 评论 -
APUE_共享存储区
1.引言 共享存储(Shared Memory)允许两个或更多进程共享一个给定的存储区。由于数据不需要在进程间进行复制,因此它是最快的一种IPC。唯一需要注意的问题是,多个进程之间对一给定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应当去取这些数据。通常,信号量被用来实现对共享存储访问的同步,此外,当然记录锁也可用于这种场合。原创 2013-09-26 21:29:15 · 1724 阅读 · 0 评论 -
APUE_消息队列
1.引言 消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。2.创建消息队列 每一个队列都有一个msqid_ds结构与其相关联。此结构规定了消息队列的当前状态。主要包括XSI IPC共同的信息ipc_perm,队列长度,队列中消息数,和最后对队列进行操作的进程及时间。struct msqid_ds { struct ip原创 2013-09-26 21:21:47 · 860 阅读 · 0 评论 -
APUE_XSI IPC共同点
1.引言 有三种IPC称作XSI IPC,即消息队列、信号量以及共享存储器。2.标识符和键 每个内核中的IPC结构都用一个非负整数的标识符加以引用。例如,对一个消息队列发送或取消息,只需要知道其队列标识符。 标识符是IPC对象的内部名。为使多个合作进程能够在同一IPC对象上会合,需要提供一个外部命名方案。为此使用键与每个IPC对象关联。键的数据原创 2013-09-11 10:47:34 · 1384 阅读 · 0 评论 -
APUE_信号
1.引言 信号是软件中断,提供了一种处理异步事件的方法。每个信号都有一个名字,以字符SIG开头,定义为正整数。很多条件可以产生信号:1、当用户按某些终端键时,引发终端产生的信号,如中断(Ctrl+C,SIGINT)、退出(Ctrl+/,SIGQUIT)和挂起(Ctrl+Z,SIGTSTP)键。2、硬件异常产生信号,如除数为0、浮点溢出(SIGFPE),无效的内存引用(S原创 2013-09-04 15:55:58 · 2054 阅读 · 0 评论 -
APUE_管道
1.引言 管道是UNIX系统IPC的最古老形式,在shell下的表现形式为管道线。每当在管道线中输入一个由shell执行的命令序列时,shell为每一条命令单独创建一进程,然后将前一条命令进程的标准输出用管道与后一条命令的标准输入相连接。管道有两个主要局限:①管道是半双工的,即数据只能在一个方向上流动。虽然某些系统提供全双工管道但是为了可移植性,不能假定系统提供此功能。原创 2013-09-11 10:26:17 · 1008 阅读 · 0 评论 -
APUE_存储映射
1.引言 存储映射I/O(Memory-mapped I/O)使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当在缓冲区中存取数据,就相当于读写文件中的相应字节。这样就可以在不使用read和write的情况下执行I/O。2.mmap函数 首先,需要告诉内核将一个给定的文件映射到一个存储区域中。这由mmap函数实现。#include vo原创 2013-09-09 09:38:28 · 1230 阅读 · 0 评论 -
APUE_记录锁
1.引言 有些时候进程需要确保其在单独地写一个文件,所以unix提供了记录锁功能。记录锁的兼容性和读写锁类似,就是可以有多个进程同时读,但是只能有一个进程单独写。2.fcntl记录锁 回忆fcntl函数,其可以有dup的功能,并且打开文件的open函数在头文件fcntl.h中定义。这里再列出fcntl的原型:#include int fcntl(原创 2013-09-09 09:29:58 · 1015 阅读 · 0 评论 -
APUE_进程控制
1.进程标识符 每一个进程都有一个非负整形(unsigned int)表示的唯一进程ID。因为进程ID是唯一的所以常将其作为其他标识符的一部分以保证其唯一性。虽然是唯一的但是进程ID是可重用的,当一个进程终止之后其ID就可以重用。系统会采用延迟重用来防止误认。 有3个特殊的进程需要记住:1、ID号为0的通常是调度进程,也称交换进程(swapper)。该进程是内核的一原创 2013-08-18 22:32:29 · 1198 阅读 · 0 评论 -
POSIX信号量
1.引言 信号量是包含一个非负整型变量,并且带有两个原子操作wait 和signal。wait 还可以被称为down、P 或lock,signal 还可以被称为up、V、unlock 或post。在Uinx的API中用的是wait和post。 如果信号量的非负整形变量S大于零,wait就将其减1,如果S 等于0,wait 就将调用线程阻塞。对于signal 操作,如原创 2013-09-02 09:55:49 · 9517 阅读 · 2 评论 -
线程基础
1.线程标识 和进程一样每一个线程都有一个线程ID,类型为pthread_t。但是与进程不同的是,进程ID是在系统中唯一的,而线程ID只在进程环境有效。#include pthread_t pthread_self(void) //返回值为调用线程的线程ID#include int pthread_create(pthread_t原创 2013-09-02 09:50:39 · 1422 阅读 · 0 评论 -
APUE_进程环境
1.引言 C程序(进程)都有由main函数开始执行。下图就是描述一个C程序是如何启动和重终止的:2. exit函数 有三个函数用于正常终止一个程序:_exit和_Exit立即进入内核(要终止一个进程需要进入内核),exit则先执行一些清理处理(包括调用执行各终止处理程序,关闭所有标准IO流,将缓冲区的数据写入文件等),然后进入内核。#include原创 2013-08-18 22:16:34 · 1031 阅读 · 0 评论 -
APUE——文件IO
1.文件描述符 文件描述符(fd)是一个无符号整数,Unix使用中文件描述符0、1、2分别对应标准输入、标准输出、标准错误。在unisted中分别定义了STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO来表示0、1、2。2.open函数#include //注意open定义在这个头文件中int open( const char *原创 2013-08-18 10:52:50 · 931 阅读 · 0 评论