Unix网络编程——简介
来源:互联网 发布:docker安装ubuntu镜像 编辑:程序博客网 时间:2024/05/18 09:10
1.简介:
1.IPC 进程间通信方式:1.管道 2.System V 消息队列 3.Posix消息队列 4.远程过程调用
2.保持进程间的同步操作:1.文件系统 2.记录上锁 3.System V信号量 4. Posix 信号量 5.互斥锁 6.读写锁
3.进程间的信息共享:1.穿过内核,访问文件系统的文件信息 2.共享驻留于内核的信息 3.共享内存区
4.IPC对象的持续性:1.随着文件系统,2.随着内核,3.随着进程持续的
2.Posix IPC:
消息队列
信号量
共享内存区
头文件
<mqueue.h>
<semaphore.h>
<sys/mman.h>
创建、打开或删除IPC函数
mq_open
mq_close
mq_unlink
sem_open
sem_close
sem_unlink
shm_open
shm_unlink
sem_init
sem_destory
控制IPC操作的函数
mq_getattr
mq_setattr
ftruncate
fstat
IPC操作函数
mq_send
mq_receive
mq_notify
sem_wait
sem_trywait
sem_post
sem_getvalue
mmap
munmap
#include "unpipc.h" char* px_ipc_name(const char* name){ char* dir,*dst,*slash; if((dst = malloc(PATH_MAX))==NULL) return NULL;//分配失败 if((dir=getenv("PX_IPC_NAME"))==NULL) {//目录名 #ifdef POSIX_IPC_PREFIX dir = POSIX_IPC_PREFIX; #else dir = "/tmp/"; #endif } slash = (dir[strlen(dir)-1] == '/')?"":"/"; snprintf(dst,PATH_MAX,"%S%S%S",dir,slash,name);//全路径名称 return dst;}
说明
mq_open
sem_open
shm_open
只读
O_RDONLY
O_RDONLY
只写
O_WRONLY
读写
O_RDWR
O_RDWR
若不存在则创建
O_CREAT
O_CREAT
O_CREAT
排他性创建
O_EXCL
O_EXCL
O_EXCL
非阻塞模式
O_NONBLOCK
若已存在则截短
O_TRUNC
1、 创建时赋予该IPC对象的权限位;
2、 所请求的访问类型(O_RDONLY、O_WRONLY或O_RDWR);
3、 调用进程的有效用户ID、有效组ID以及各个辅助组ID;
执行权限测试的步骤:
1、 如果当前进程的有效用户ID为0,那就允许访问;
2、 在当前的进程的有效用户ID等于该IPC对象属主ID的前提下,如果相应的用户访问权限位已设置,那就允许访问,否则就拒绝访问;
3、 当前进程的有效组ID或它的某个辅助组ID等于该IPC对象的组ID的前提下,如果相应的组访问权限已设置,那就允许访问,否则拒绝访问;
4、 如果相应的其他用户访问权限已设置,那就允许访问,否则拒绝访问。
3.System V IPC
2、key_t键和ftok函数
三种类型的IPC使用key_t值作为他们的名字,头文件<sys/types.h>把key_t定义为一个整数,通常是一个至少32位的整数,由ftok函数赋予的。函数ftok把一个已存的路径和一个整数标识符转换成一个key_t值,称为IPC键。函数原型如下:
#include <sys/types.h>#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id); //成功返回IPC键,出错返回-1
3、ipc_perm结构
内核给每个IPC对象维护一个信息结构,内容跟内核给文件维护的信息类似。Unix下结构信息如下:
struct ipc_perm
{
key_t key; /* Key supplied to semget(2) */
uid_t uid; /* Effective UID of owner */
gid_t gid; /* Effective GID of owner */
uid_t cuid; /* Effective UID of creator */
gid_t cgid; /* Effective GID of creator */
unsigned short mode; /* Permissions */
unsigned short seq; /* Sequence number */
};
4、创建与打开IPC通道
对于key值,有两种选择:
(1)调用fotk函数,给它传递pathname和id。
(2)指定key为IPC_PRIVATE,保证会创建一个新的、唯一的IPC对象。
5、标识符重用
System V IPC 标识符是系统范围的,不是特定于进程的。ipc_perm结构含有一个名为seq的变量,是内核为系统每个潜在的IPC对象维护的计数器,每当删除一个IPC对象时,内核就递增相应的槽位号,若溢出则循环到0。这样避免短时间内重用System V IPC标识符,有助于确保过早终止的服务器重新启动后不会重用标识符。
6、ipcs和ipcrm程序
System V IPC的三种类型不是以文件系统中的路径名标识的,不能使用ls和rm程序查看和删除。而是同ipcs程序输出System V IPC特性的各种信息,ipcrm则删除一个System V 消息队列、信号量或共享内存区。
ipcs - 分析消息队列、共享内存和信号量
ipcs [-mqs] [-abcopt] [-C core] [-N namelist]
-m 输出有关共享内存(shared memory)的信息
-q 输出有关信息队列(message queue)的信息
-s 输出信号量(semaphore)的信息
ipcrm -m|-q|-s shm_id
-m 输出有关共享内存(shared memory)的信息
-q 输出有关信息队列(message queue)的信息
-s 输出信号量(semaphore)的信息
- Unix网络编程—简介
- Unix网络编程——简介
- Unix网络编程三——套接字编程简介
- UNIX网络编程——TCP/IP简介
- Unix网络编程(1)------简介
- 《UNIX网络编程》读书笔记——第三章 套接字编程简介
- UNIX网络编程笔记(2)—套接字编程简介
- UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
- unix网络编程第1章:简介
- UNIX网络编程--简介(一)
- Unix网络编程 之 socket简介
- Unix网络编程 之 socket简介
- UNIX网络编程I-01简介
- UNIX网络编程笔记(1):TCP简介
- UNIX网络编程卷一 第一章 简介
- 《UNIX网络编程 卷2》 笔记: 简介
- 《Unix 网络编程》学习笔记 第一章:简介
- UNIX网络编程笔记(6)—UDP网络编程
- 轮训播放
- MySQL数据库表锁定的几种方法实现
- JavaFX学习路径
- 网站的访问过程
- python 3.x 163邮箱登陆,邮件读取
- Unix网络编程——简介
- iOS 支付宝支付
- Power长按、组合键分析
- Conversion to Dalvik format failed: Unable to execute dex
- 安装MAC10.9VMWARE虚拟机
- [cocoaPods]cocoaPods安装与使用
- UIViewContentMode各模式的含义和效果
- html
- Objective-C关联引用