linux进程间通信-------共享内存
来源:互联网 发布:淘宝运营每天做什么 编辑:程序博客网 时间:2024/06/18 08:49
Linux系统中的两个进程可以通过共享内存的方式来进行通信,属于IPC通信,也就意味着和键值有关。。。
首先通过某个进程创建一片共享内存,创建的这片共享内存会返回一个描述符,这样其它的进程也可以使用这片内存。要使用共享内存的进程都必须先把那片内存映射到要调用的进程里,这里可以自己创建一个结构,用这个结构的指针来指向这片地址。
用完共享内存后,要把共享内存和进程分离,最后分离的进程还要把这块共享内存删除。
用到的函数有
shmget 创建/获取共享内存
shmat 映射共享内存
shmdt 脱离(分离)共享内存
shmctl 控制共享内存(其中可以删除共享内存)
#include
#include
#include
#include
#include
#include
#include
#define TEXT_SZ 2048
struct shared_use_st
{
int written_by_you;
charsome_text[TEXT_SZ];
};
int main()
{
int shmid;
int running = 1;
struct shared_use_st*shared_stuff;
char buffer[TEXT_SZ];
//1.创建共享内存
shmid = shmget((key_t)1234,sizeof(struct shared_use_st), IPC_CREAT);
if(shmid == -1)
{
printf("creat shmid failed\n");
exit(EXIT_FAILURE);
}
//2.映射共享内存
shared_stuff = (structshared_use_st *)shmat(shmid, NULL, 0);
//3.循环
while(running == 1)
{
while(shared_stuff->written_by_you == 1)
{
sleep(1);
printf("waitreadprocess!\n");
}
//3.1获取用户输入
fgets(buffer, TEXT_SZ, stdin);
//3.2将用户输入的字符串放入共享内存
strncpy(shared_stuff->some_text, buffer, TEXT_SZ);
shared_stuff->written_by_you = 1;
if(strncmp(buffer, "end", 3) == 0)
running = 0;
}
//4.脱离共享内存
shmdt((const void*)shared_stuff);
return 1;
#include
#include
#include
#include
#include
#define TEXT_SZ 2048
struct shared_use_st
{
};
int main()
{
}
阅读全文
0 0
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信:共享内存
- linux环境进程间通信:共享内存
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信 共享内存
- linux进程间通信方式 -- 共享内存
- Linux 进程间通信:共享内存
- Linux环境进程间通信: 共享内存
- Linux环境进程间通信: 共享内存
- linux进程间通信之共享内存
- linux进程间通信之共享内存
- linux进程间共享内存通信详解
- Linux进程间通信 共享内存
- Linux 进程间通信:共享内存(上)
- Linux 进程间通信: 共享内存(下)
- Linux环境进程间通信---共享内存
- Linux进程间通信 共享内存
- Linux环境进程间通信-共享内存
- main函数的两个参数使用
- 通过信号量达到进程对资源占用的互…
- 信号量同步编程
- 创建文件&复制文件&删除文件
- OK6410ping通Linux虚拟机
- linux进程间通信-------共享内存
- linux进程间通信-------消息队列
- synchronized与static synchronized 的区别
- 消息队列的范例代码
- linux多线程程序
- ubuntu下,ARM_tools 的安装
- linux网络通信-----TCP协议
- three
- linux网络通信-------UDP协议