UNIX环境高级编程:进程管理和通信
参数 signum:指定信号 handler: SIG_IGN:忽略该信号。 SIG_DFL:采用系统默认方式处理信号。 自定义的信号处理函数指针 返回值 成功:设置之前的信号处理方式 出错:-1 sigemtpyset(&set) sigaddset(&set, signum) sigprocmask(SIG_UNBLOCK|SIG_BLOCK, &set, NULL) System V IPC对象 IPC对象,都需要key来产生,通过ID来操作对象。 共享内存 共享内存块提供了在任意数量的进程之间进行高效双向通信的机制。每个使用者都可以读取写入数据,但是所有程序之间必须达成并遵守一定的协议,以防止诸如在读取信息之前覆写内存空间等竞争状态的出现。 Linux无法严格保证提供对共享内存块的独占访问,甚至是在您通过使用IPC_PRIVATE创建新的共享内存块的时候也不能保证访问的独占性。 同时,多个使用共享内存块的进程之间必须协调使用同一个键值。 产生一个key值 #include <sys/types.h> #include <sys/ipc.h> key_t ftok( const char *pathname, //就是你指定的文件名(已经存在的文件名),一般使用当前目录'.'。 int proj_id id//id是子序号。(一般填存任意字母或者数字) ) 返回值: 成功:一个key值, 失败:-1,并设置errno.
注意: P1 创建的IPC对象如何让另一进程知道ID号?ID是系统分配的。但在创建对象时可以指定key,或者可以事先约定好 第一个进程用key来创建IPC对象,第二个进程只需要通过key来打开IPC对象 共享内存的特点: 共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。 共享内存的使用包括如下步骤: 创建/打开共享内存 :需要判断是否已经创建过. 映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问. 撤销共享内存映射. 删除共享内存对象. 调试: 查看系统中的对象ipcs 删除系统中的对象ipcrm #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> 创建/打开 共享内存 int shmget( key_t key, // IPC_PRIVATE或 ftok的返回值, 看到很多key的值是0,是系统中用IPC_PRIVATE创建的。 int size, // 共享内存区大小 int shmflg ); (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |