上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 75 下一页
摘要: 1、IPC缺陷 1)XSI IPC都是内核相关的,存在于整个系统范围,但并没有引用计数,可能浪费资源或数据不安全。因此进程结束的时候需要显式地删除结构里面的内容。不像管道那样,进程一结束,管道就被完全删除了。 2)使用独立的命名空间,添加了很多新的系统调用,导致操作系统复杂。XSI IPC结构在文件系统中没有名字,所有可用于文件的函数都无法使用,为了支持他们不得不增加十几条全新的... 阅读全文
posted @ 2011-09-17 12:41 浪里飞 阅读(2314) 评论(0) 推荐(0)
摘要: 1、特点:① 进程相关的② 与XSI共享内存一样,需要与同步原语一起使用③ 只能是有共同祖先的进程才能使用2、使用系统调用mmap()用于共享内存的两种方式: (1)使用普通文件提供的内存映射: 适用于任何进程之间。此时,需要打开或创建一个文件,然后再调用mmap()典型调用代码如下:fd=open(name, flag, mode); if(fd<0) ...ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP_SHARED , fd , 0); 通过mmap()实现共享内存的通信方式有许多特点和要注意的地方,可以参看UNIX网络编程第二卷。【3 阅读全文
posted @ 2011-09-15 19:32 浪里飞 阅读(3461) 评论(0) 推荐(0)
摘要: 1、key_t ftok( char * fname, int id )fname指定的文件名(已经存在的文件名),一般使用当前目录;id是子序号。一般UNIX实现中,是将文件的索引节点号(ls -i)取出,前面加上子序号得到key_t的返回值。系统建立IPC通讯 (消息队列、信号量和共享内存)时必须指定一个ID值。通常情况下,该id值通过ftok函数得到。 #include <sys/types.h> #include <sys/ipc.h> key = ftok(".", 1);参考【1】 http://baike.baidu.com/view/ 阅读全文
posted @ 2011-09-14 23:57 浪里飞 阅读(938) 评论(0) 推荐(0)
摘要: 1、定义#include <unistd.h>#include<sys/types.h>pid_t fork( void );pid_t 是一个宏定义,其实质是int,被定义在#include<sys/types.h>中返回值:若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-12、函数说明:一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。子进程是父进程的副本,它将获得 阅读全文
posted @ 2011-09-14 20:01 浪里飞 阅读(965) 评论(0) 推荐(0)
摘要: 1、共享内存1)分类XSI 共享内存匿名共享内存mmap2)原理:地址空间:一个连续的内存地址单元物理地址空间:物理内存地址组成的地址空间,其空间大小与物理内存一致。虚拟地址空间:CPU MMU 提供的功能,可将虚地址转换为物理地址,所有的虚地址组成的连续空间叫虚地址空间,有时候也叫线性空间。其空间大小与机器字长相关。32位机器上为2^32,4G左右3)特性: 内核相关的;需要与同步原语一起使用才能保证数据一致性(Mutex,读写锁、信号量);最快速,copy较少4)APIint shmget(key_t key, size_t size, int shmflg);得到一个共享内存标识符或创建 阅读全文
posted @ 2011-09-14 07:44 浪里飞 阅读(919) 评论(0) 推荐(0)
摘要: 1、XSI system V的信号量是信号量集,可以包括多个信号灯(有个数组),每个操作可以同时操作多个信号灯 posix是单个信号灯,POSIX有名信号灯支持进程间通信,无名信号灯放在共享内存中时可以用于进程间通信。 2、POSIX信号量在有些平台并没有被实现,比如:SUSE8,而SYSTEM V大多数LINUX/UNIX都已经实现。两者都可以用于进程和线程间通信。 3、... 阅读全文
posted @ 2011-09-13 16:45 浪里飞 阅读(1802) 评论(0) 推荐(0)
摘要: sem_open(3)initialize and open a named semaphoresem_init(3)initialize an unnamed semaphoresem_wait(3)P 操作sem_post(3)V 操作sem_close(3)close a named semaphoresem_destroy(3)destory an unnamed semaphoresem_unlink(3)remove a named semaphore 无名信号量可以用在共享内存的情况下,比如实现进程中各个线程之间的互斥和同步。命名信号量通常用于不共享内存的情况下,比如不共享内存的 阅读全文
posted @ 2011-09-13 16:26 浪里飞 阅读(1593) 评论(0) 推荐(0)
摘要: 1、XSI(System Interface and Headers),代表一种Unix系统的标准,为unix系统定义一个界面。【1】2、XSI IPC,依托标识符和键来实现的,如同管道靠文件描述符来实现一样。3、XSI IPC使用一般步骤:1)IPC对象进程内部用标识符identifier,进程外部标识用key2)首先用semget,shmget,msgget等函数根据key创建或获取IPC对象的identifier3)然后根据identifier用semctrl,shmctrl等控制函数做某些修改,这步可选4)最后用各个IPC特有操作函数如semop,shmat等函数操作4、信号量使用示例 阅读全文
posted @ 2011-09-13 00:15 浪里飞 阅读(1538) 评论(0) 推荐(0)
摘要: IPC通信1、pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。管道的缓冲区是有限的(管道存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节流,要求管道的读出方和写入方必须事先约定好数据的格式。2、命名管道(fifo):命名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。严格遵循先进先出(first in first out),对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。诸如不支持lseek()等文件定位操作。 3、信号量(semophore 阅读全文
posted @ 2011-09-11 10:49 浪里飞 阅读(608) 评论(0) 推荐(0)
摘要: 1、IPC的持久性1)进程相关的:IPC中数据一直存在到最后一个关联进程关闭时pipe、fifo等2)内核相关的IPC:IPC中数据一直存在,除非内核重启或删除消息队列,共享内存等3)文件系统相关的IPC:IPC中数据一直存在,除非显式删除文件2、管道匿名管道(pipe):只能用于同一个祖先的进程组有名管道(fifo):不相关的进程也可以使用3、匿名管道int pipe(int filedes[2]);fildes[0] 用于从管道中读取数据fildes[1] 用于将数据写入管道不需要open,直接read/write 等系统调用系统自动删除,进程不需要考虑示例View Code #inclu 阅读全文
posted @ 2011-09-10 21:27 浪里飞 阅读(1065) 评论(0) 推荐(0)
上一页 1 ··· 39 40 41 42 43 44 45 46 47 ··· 75 下一页