当前位置: 技术问答>linux和unix
关于共享内存的一个小程序
来源: 互联网 发布时间:2017-01-01
本文导语: 我在网上没找到这方面的程序,但是手头有道题: 内容:reader和writer两个进程通过共享内存交换数据。writer从标准输入读入字符串写入共享内存,reader把共享内存里的字符串打印到标准输出。 ...
我在网上没找到这方面的程序,但是手头有道题:
内容:reader和writer两个进程通过共享内存交换数据。writer从标准输入读入字符串写入共享内存,reader把共享内存里的字符串打印到标准输出。
reader和writer用信号实现同步
思路:1. reader和writer用信号实现同步前要知道对方的进程号,利用共享内存保存
2.reader和writer运行顺序不确定,约定先运行的进程创建共享内存并初始化
下面是我自己编的,使用ftok生成一个key,然后shmget,shmat,估计大家都没心思看,希望有心人出现,会有另外两个帖子送分。第一次编这个。
问题是最下面红色的部分出错,然后帮我看看别的地方还有哪里不对。
#include
#include
#include
#include
#include
#include
#include
#include
#define SHM_SIZE 1024
key_t MYKEY;
void dealread();
void main()
{
pid_t p1,p2;
int shmid;
char *shmptr;
MYKEY=ftok(".",1);
printf("%dn",MYKEY);
if((p1=fork())==-1)
{
printf("fork errorn");
exit(0);
}
else if(p1==0)//write
{
if((shmid=shmget(MYKEY,SHM_SIZE,(IPC_CREAT|0666)))
内容:reader和writer两个进程通过共享内存交换数据。writer从标准输入读入字符串写入共享内存,reader把共享内存里的字符串打印到标准输出。
reader和writer用信号实现同步
思路:1. reader和writer用信号实现同步前要知道对方的进程号,利用共享内存保存
2.reader和writer运行顺序不确定,约定先运行的进程创建共享内存并初始化
下面是我自己编的,使用ftok生成一个key,然后shmget,shmat,估计大家都没心思看,希望有心人出现,会有另外两个帖子送分。第一次编这个。
问题是最下面红色的部分出错,然后帮我看看别的地方还有哪里不对。
#include
#include
#include
#include
#include
#include
#include
#include
#define SHM_SIZE 1024
key_t MYKEY;
void dealread();
void main()
{
pid_t p1,p2;
int shmid;
char *shmptr;
MYKEY=ftok(".",1);
printf("%dn",MYKEY);
if((p1=fork())==-1)
{
printf("fork errorn");
exit(0);
}
else if(p1==0)//write
{
if((shmid=shmget(MYKEY,SHM_SIZE,(IPC_CREAT|0666)))