问个问题,

starboy520 2010-10-14 09:48:15
最近在看操作系统概念,后面有个例题, 子进程,写共享内存, 父进程输出,
我写了程序不知道出问题在哪儿了,大家帮忙看下,谢谢
为何子进程不输出呢


#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_SEQUENCE 20
#include <stdlib.h>
#include <assert.h>
#include <sys/shm.h>
#include <sys/stat.h>

typedef struct
{
int fib[MAX_SEQUENCE];
int seq_size;
}shared_data;


int main(int argc, char *argv[])
{
int seg_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR | S_IWUSR);
shared_data *shared_memeory = (shared_data *)shmat(seg_id, NULL, 0);
shared_memeory->seq_size = atoi(argv[1]);

pid_t pid = fork();
if( pid == 0)
{
int f1 = 1;
int f2 = 1;
int i;
shared_memeory->fib[0] = f1;
shared_memeory->fib[1] = f2;
for(i = 3; i <= shared_memeory->seq_size; i++)
{
int t = f1+f2;
f1 = f2;
f2 = t;
shared_memeory->fib[i-1] = t;
}


}
else if( pid > 0)
{
// sleep(5);
wait(NULL);
int i ;
for(i = 0; i < shared_memeory->seq_size; i++)
printf("%d\n", shared_memeory->fib[i]);
shmdt(shared_memeory);
shmctl(seg_id, IPC_RMID, NULL);
exit(0);
}
}





...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
starboy520 2010-10-14
  • 打赏
  • 举报
回复
有了 IPC_PRIVATE 就不需要 IPC_CREAT了
justkk 2010-10-14
  • 打赏
  • 举报
回复
shmget(IPC_PRIVATE, sizeof(shared_data), IPC_CREAT | S_IRUSR | S_IWUSR);
justkk 2010-10-14
  • 打赏
  • 举报
回复
貌似你的共享内存没有创建吧
shmget需要指定IPC_CREAT

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧