免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2047 | 回复: 9
打印 上一主题 下一主题

UNIX run time 错误... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-04 12:22 |只看该作者 |倒序浏览
不知道是应该在上一个贴子后面继续写还是新开一个。but any way...
请帮帮忙  

我在run一个C 程序的时候得到了这样一个error msg:

"shmget failed in ap_tpf_get_shared_mem function: No space left on device"

是什么意思啊?

在我的程序里有:
struct shmid_game *Game;
shmid = shmget(key, SIZE, IPC_CREAT|0666);

谢谢先

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-03-04 12:27 |只看该作者

UNIX run time 错误...

把稍微完整一点代码的贴上来,另外size多大呀?

论坛徽章:
0
3 [报告]
发表于 2003-03-04 12:42 |只看该作者

UNIX run time 错误...

  1. #define SIZE 100
  2. #define MAX_PROCESS 20

  3. struct shmid_game{
  4.     int num_process;
  5.     int num_running;
  6.     int next;
  7.     int counter;
  8.     int count_max;
  9.     int proc[5];
  10. };

  11. int main(int argc, char *argv[])
  12. {
  13.     struct shmid_game myGame;
  14.     int pid, i;
  15.     int status;
  16.     myGame.counter = 0;
  17.     int flag = 1;
  18.     int shmid;
  19.     key_t key = 5678;
  20.        
  21.     struct shmid_game *Game;
  22.     shmid = shmget(key, SIZE, IPC_CREAT|0666);
  23.        
  24.     if (shmid<0){
  25.         perror("shmget failed in ap_tpf_get_shared_mem function");
  26.         exit(1);
  27.     }

  28.     for(i = 0; i < 5; i++)
  29.     {
  30.         myGame.proc[i] = 1;
  31.         pid = fork();
  32.         
  33.         if (pid < 0)/* check for error in fork */
  34.         {        
  35.              perror("error in fork");
  36.              exit(1);
  37.          }
  38.          else if (pid >; 0)
  39.          {
  40.                 if(((i%3)+1) != 3 && myGame.counter<3)
  41.         myGame.counter++;
  42.          else
  43.         {
  44.              flag = 0;
  45.              myGame.counter = 0;
  46.          }
  47.          printf("process %d <pid %d>; %d\n", i+1, getppid(),    myGame.counter);
  48.             wait(&status);  /* parent waits for child to finish */
  49.         }
复制代码

.
.
.
.

再做不出来就死定了  

论坛徽章:
0
4 [报告]
发表于 2003-03-04 12:47 |只看该作者

UNIX run time 错误...

帖代码时使用code功能

论坛徽章:
0
5 [报告]
发表于 2003-03-04 13:01 |只看该作者

UNIX run time 错误...

程序应该没问题,俺估计是系统限制(共享内存大小),100字节可能太少了,你试一下改为 20000,或者是修改系统配置参数(和操作系统有关),把下限设小一些。
&amp;sup2;        Sco unix下可用scoadmin程序进行配置
Hardware/Kernel Manager
Kernel =〉Tune Parameters...
参数修改后需要重新进行内核连接,重新启动机器
&amp;sup2;        SUN 下可用admintool程序进行配置
&amp;sup2;        AIX 下可用smitty程序进行配置
&amp;sup2;        HPUNIX 下可用sam程序进行配置

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-03-04 13:07 |只看该作者

UNIX run time 错误...

我试过了,没问题

你的OS环境?以及运行swapinfo, free,ulimit -a什么结果?

论坛徽章:
0
7 [报告]
发表于 2003-03-04 13:12 |只看该作者

UNIX run time 错误...

原帖由 "gadfly" 发表:
我试过了,没问题

你的OS环境?以及运行swapinfo, free,ulimit -a什么结果?


我是telnet到学校的unix envoirment. 运行swapinfo, free 系统都说找不到。ulimit -a 的结果是
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         unlimited
stack(kbytes)        8192
coredump(blocks)     0
nofiles(descriptors) 256
vmemory(kbytes)      unlimited

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-03-04 13:57 |只看该作者

UNIX run time 错误...

ENOSPC is  returned  if  all possible shared memory id's have been
                   taken (SHMMNI) or if allocating a segment of the  requested
                   size would cause the system to exceed the system-wide limit
                   on shared memory (SHMALL).


就是说两种可能,一种是因为,所有已经分配的shm id超过了上限(SHMMNI),还有就是如果
分配这个段,会使得所有分配的shared memory超过系统上限(SHMALL).

解决办法。让系统管理员停一些占用了shm的进程,或者手工删除一些没释放的
shm。还有就是调大SHMMNI或SHMALL

论坛徽章:
0
9 [报告]
发表于 2003-03-04 14:26 |只看该作者

UNIX run time 错误...

原帖由 "gadfly" 发表:
。。。或者手工删除一些没释放的
shm。还有就是调大SHMMNI或SHMALL


怎样手工删除shm呢?  

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-03-04 14:54 |只看该作者

UNIX run time 错误...

用ipcs列出所有的shm,然后看看,你的哪个key没用

再用ipcrm -m shmid删除
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP