linux高级编程day08 笔记
2012-08-22 14:25
246 查看
一.基于文件的通信
1.普通文件(io/mmap)
2.有名管道文件
3.匿名管道
4.Socket
二.基于内存的通信
0.一组内核内存的工具
ipcs
ipcs -m
ipcs -q
ipcs -s
ipcrm -q 编号ID
1.普通的父子进程之间的匿名内存共享映射
2.内核共享内存
编程模型
2.1.创建共享内存,得到一个ID shmget
2.2.把ID影射成虚拟地址(挂载) shmat
2.3.使用虚拟地址访问内核共享内存 使用任何内存函数与运算符号
2.4.卸载虚拟地址 shmdt
2.5.删除共享内存 shctl(修改/获取共享内存的属性)
共享内存的属性
案例:
A.创建共享内存,并且修改内存数据。
1.创建共享内存
为什么要key_t:
约定创建与访问的是同一个共享内存。
第三个参数:
方式|权限
方式:创建 IPC_CREAT IPC_EXCL
打开:0
常见的两种方式:
创建:IPC_CREAT|IPC_EXCL | 0666;
打开:0
返回:
成功返回共享内存ID
失败返回-1
B.根据ID得到共享,并且访问内存数据。
C.删除
how:
IPC_STAT
IPC_SET
IPC_RMID
View Code
总结:
共享内存
共享队列
socket文件通信
课堂练习:
CS模型代码
CS模型把socket文件替换成IP地址
课后作业:
模仿课堂案例独立完成
1.共享内存
2.共享队列
3.socket对等模型
4.socket的CS模型
1.普通文件(io/mmap)
2.有名管道文件
3.匿名管道
4.Socket
二.基于内存的通信
0.一组内核内存的工具
ipcs
ipcs -m
ipcs -q
ipcs -s
ipcrm -q 编号ID
1.普通的父子进程之间的匿名内存共享映射
2.内核共享内存
编程模型
2.1.创建共享内存,得到一个ID shmget
2.2.把ID影射成虚拟地址(挂载) shmat
2.3.使用虚拟地址访问内核共享内存 使用任何内存函数与运算符号
2.4.卸载虚拟地址 shmdt
2.5.删除共享内存 shctl(修改/获取共享内存的属性)
共享内存的属性
案例:
A.创建共享内存,并且修改内存数据。
1.创建共享内存
int shmget(key_t key,//为什么需要key int size,//共享内存大小 int flags//共享内存的属性与权限 )
为什么要key_t:
约定创建与访问的是同一个共享内存。
第三个参数:
方式|权限
方式:创建 IPC_CREAT IPC_EXCL
打开:0
常见的两种方式:
创建:IPC_CREAT|IPC_EXCL | 0666;
打开:0
返回:
成功返回共享内存ID
失败返回-1
B.根据ID得到共享,并且访问内存数据。
void shmat(int id, void *startaddr,//0:系统指定首地址 int flags)//挂载方式,建议0,可以使用IPC_RDONLY
C.删除
int shmctl(int id,//被操作的共享内存ID int how,//操作方式:一共三种操作 struct shmid_ds*ds)//共享内存属性
how:
IPC_STAT
IPC_SET
IPC_RMID
View Code
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <linux/un.h> #include <string.h> #include <unistd.h> main() { int fd; int r; char buf[100]; struct sockaddr_un addr={0}; //1.建立socket //fd=socket(AF_UNIX,SOCK_DGRAM,0); fd=socket(AF_UNIX,SOCK_STREAM,0); //2.连接到指定的地址 addr.sun_family=AF_UNIX; memcpy(addr.sun_path,"cs.sock", strlen("cs.sock")); r=connect(fd,(struct sockaddr*)&addr, sizeof(addr)); //3.发送数据 while(1) { write(fd,"Hello!MaomaoYu!", strlen("Hello!MaomaoYu!")); read(fd,buf,100); printf("%s\n",buf); sleep(1); } //4.关闭 close(fd); }
总结:
共享内存
共享队列
socket文件通信
课堂练习:
CS模型代码
CS模型把socket文件替换成IP地址
课后作业:
模仿课堂案例独立完成
1.共享内存
2.共享队列
3.socket对等模型
4.socket的CS模型
相关文章推荐
- linux高级编程day01 笔记
- Linux高级编程复习笔记 第二章 映射虚拟内存 mmap gcc 静态库 动态库
- c++ 学习笔记(高级linux编程) day9
- 【linux高级环境编程学习笔记三】共享内存通信
- Linux高级编程复习笔记 第三章 makefile IO read write
- c++ 学习笔记(高级linux编程) day14
- linux高级编程day06 笔记
- 寒假学习 第15天 (linux 高级编程) 笔记 总结
- c++ 学习笔记(高级linux编程) day13
- linux高级编程day04 笔记
- linux高级编程day10 笔记
- c++ 学习笔记(高级linux编程) day12
- c++ 学习笔记(高级linux编程) day1
- linux高级编程day05 笔记
- linux高级编程day07 笔记
- Linux高级文件编程 标准C部分笔记
- linux高级编程day03 笔记
- c++ 学习笔记(高级linux编程) day3
- c++ 学习笔记(高级linux编程) day5
- linux高级编程day13 笔记