|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编程在主进程中创建两个子进程,在子进程 shmw()中创建一个系统 V 共享内存区,并在其中写入格式化数据;在子进程 shmr()中访问同一个系统 V 共享内存区,读出其中的格式化数据。
运行结果是自己想要的,但是会显示段错误,核心已转储。想求助一下怎么解决,是什么原因
- #include <sys/types.h>
- #include <sys/shm.h>
- #include <sys/ipc.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define SHMKEY 75
- int shmid,i;
- int *addr;
- void shmw()
- {
- int i;
- shmid = shmget(SHMKEY,1024,0777);
- addr = shmat(shmid,0,0);
- for(i=9;i >=0;i--)
- {
- while(*addr !=-1);
- printf("sent\n");
- *addr = i;
-
- }
- exit(0);
- }
- void shmr()
- {
- shmid = shmget(SHMKEY,1024,0777|IPC_CREAT);
- addr = shmat(shmid,0,0);
- do
- {
- *addr = -1;
- while(*addr == -1);
- printf("received\n");
- }while(*addr);
- shmctl(shmid,IPC_RMID,0);
- exit(0);
- }
- main()
- {
- int pid1,pid2;
- while((pid1 = fork()) == -1);
- if(pid1 == 0)
- {
- shmr();
- wait(0);
- }
- else
- {
- while((pid2 == fork()) ==-1);
- if(pid2 == 0)
- {
- shmw();
- wait(0);
- }
- }
- }
复制代码
|
|