UNPv2
勇敢地追
这个作者很懒,什么都没留下…
展开
-
UNPv2第一章:简介
1 概述IPC是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统上的不同进程间的消息传递的不同方式。 在Unix操作系统演变史中,消息传递经历了如下几个发展阶段: 管道(pipe)是第一个广泛使用的IPC形式,既可在程序中使用,也可从shell中使用。管道的问题在于只能在父子进程中使用,但此问题已被有名管道(named pipe)的引原创 2016-04-27 08:47:56 · 488 阅读 · 0 评论 -
UNPv2第十三章:Posix共享内存区
13.1 概述:Posix提供了无亲缘关系进程间共享内存区的两种方法: 内存映射文件:由open函数打开,由mmap函数把得到的描述字映射到当前进程地址空间的一个文件 共享内存区对象:由shm_map打开一个IPC名字,由mmap函数把得到的描述字映射到当前进程地址空间的一个文件 13.2 shm_open和shm_unlink函数Posix共享内存区涉及两个步骤要求: 指定一个名字原创 2016-04-27 09:26:18 · 317 阅读 · 0 评论 -
UNPv2第十二章:共享内存区
12.1 概述:共享内存区是最快的IPC形式,一旦这样的内存区映射到共享它的进程的地址空间,这些进程的数据传递就不再涉及内核。12.2 mmap,munmap,msync函数Mmap函数把一个文件或一个Posix共享内存区对象映射到调用进程的地址空间。使用该函数有三个目的: 使用普通文件提供内存映射 使用特殊文件提供匿名内存映射 使用shm:open提供无亲缘关系进程间原创 2016-04-27 09:24:31 · 353 阅读 · 0 评论 -
UNPv2第十一章:System V信号灯
二值信号灯:值为0或1的信号灯。资源如果被锁住就是0,如果可用为1 计数信号灯:值在0到某个限制值之间的信号灯。信号灯的值就是可用资源数1 semget函数创建一个信号灯集或访问一个已存在的信号灯集#include<sys/sem.h> Int segget(key_t key, int nsems, int oflag); //返回:成功时为非负标识符,出错时为-1返回值是一个信号灯标识原创 2016-04-27 09:20:17 · 522 阅读 · 0 评论 -
UNPv2第十章:Posix信号灯
信号灯、互斥锁和条件变量之间的差异: 互斥锁必须由给他上锁的线程解锁,信号灯的挂出不必由执行过它的等待操作的同一线程执行 互斥锁要么被锁住要么被解开 既然信号灯有一个与之相关连的状态(它的计数值),信号灯挂出操作总是被记住。然而当想一个条件变量发送信号时,如果没有线程等待在该条件变量上,那么该信号将丢失1 sem_open、sem_close和sem_unlink函数功原创 2016-04-27 09:18:33 · 407 阅读 · 0 评论 -
UNPv2第八章:读写锁
1 获取和释放读写锁pthread_rwlock_rdlock()用来获取读出锁,如果相应的读出锁已经被某个写入者占有,那么就阻塞调用线程。 pthread_rwlock_wrlock()用来获取一个写入锁,如果相应的写入锁已经被其它写入者或者一个或多个读出者占有,那么就阻塞该调用线程; pthread_rwlock_unlock()用来释放一个读出或者写入锁。函数原型如下:#include<p原创 2016-04-27 09:16:10 · 398 阅读 · 0 评论 -
UNPv2第七章:互斥锁与条件变量
1 互斥锁:上锁和解锁#include<pthread.h> int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); pthread_mutex_lock原创 2016-04-27 09:14:55 · 367 阅读 · 0 评论 -
UNPv2第六章:System V 消息队列
6.1 概述6.2 msgget函数用于创建一个新的消息队列或者访问一个已存在的消息队列#include <sys/msg.h> int msgget(key_t key, int oflag) 返回:成功时为非负标识符,出错时为-1返回值是一个整数标识符,其他三个msg函数就用它来指代该队列。它是基于指定的key产生的,而key既可以是ftok返回值,也可以是IPC_PRIVATE。 参原创 2016-04-27 09:12:08 · 297 阅读 · 0 评论 -
UNPv2第五章:Posix消息队列
5.1 概述消息队列可认为是一个消息链表。有足够写权限的线程可往队列里放置消息,有足够读权限的线程可从队列里取走消息。 队列中每个消息都具有如下属性: 一个无符号整数优先级或一个长整数类型 消息的数据部分长度 数据本身 5.2 mq_open、mq_close和mq_link函数Mq_open函数创建一个新的消息队列或打开一个已存在的消息队列#include<mqu原创 2016-04-27 09:09:59 · 331 阅读 · 0 评论 -
UNPv2第四章:管道和FIFO
1.一个简单的客户服务器例子2.管道所有式样的Unix都提供管道。它由pipe函数创建,提供单向数据流#include<unistd.h> int pipe(int filedes[2]);pipe()会建立管道,并将文件描述词由参数filedes数组返回 filedes[0]为管道里的读取端 filedes[1]则为管道的写入端 若成功原创 2016-04-27 09:06:06 · 366 阅读 · 0 评论 -
UNPv2第三章:System V IPC
3.1 概述System V IPC有以下三种类型 System V消息队列 System V信号灯 System V共享内存区 3.2 key_t键和ftok函数函数ftok把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键(key) 该函数把从pathname导出的信息与id的低序8位组合成一个整数IPC键#include <sys/ipc原创 2016-04-27 08:55:46 · 343 阅读 · 0 评论 -
UNPv2第二章:Posix IPC
2.1 概述:Posix IPC共有三种类型: Posix消息队列 Posix信号灯 Posix共享内存区2.2 IPC名字#include “unpipc.h” char *px_ipc_name(const char *name); 返回:成功时为非空指针,出错时为NULLName参数不能有任何斜杠符。例如下面的调用 px_ipc_name(“test1”);2.原创 2016-04-27 08:51:17 · 358 阅读 · 0 评论 -
UNPv2第十四章:System V共享内存区
1 shmget函数#include <sys/shm.h> int shmget(key_t key, size_t size, int oflag) 返回一个共享区标识符Key既可以是ftok返回值,也可以是IPC_PRIVATE Size以字节为单位指定内存区大小2 shmat函数#include <sys/shm.h> void *shmat(int shmid, const void *原创 2016-04-27 09:33:00 · 416 阅读 · 0 评论