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;
char some_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 = (struct shared_use_st *)shmat(shmid, NULL, 0);
//3.循环
while(running == 1)
{
while(shared_stuff->written_by_you == 1)
{
sleep(1);
printf("wait readprocess!\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()
{
}