cgi 共享内存的问题

问题已经解决!

int   main(   void   )
{
              int   i,   n;
              printf("Content-type:text/html\n\n"   );
              printf(" <html> <title> post </title> "   );
              if(   getenv("CONTENT_LENGTH")   )
              {
                      n   =   atoi(   getenv("CONTENT_LENGTH")   );
              }
              else
              {
                              n   =   0;
              printf("(NULL)"   );
  }
              char   temp[n];
              for(   i=0;   i <n;   i++   )
              {
                              //fputc(   getc(stdin),   stdout   );
                              temp[i]=getc(stdin);
                                  //   queries++;
              }
              temp[n]='\0';
              queries=temp;
              printf("a+b=%d",atoi(getquery("a"))+atoi(getquery("b")));
              //printf(temp);


              int   shm_id;
              key_t   key;
              struct   Term{char   name[3];char   id[3];};
              Term   *p_map;
              char*   name   =   "/usr/local/apache2/cgi-bin/cs1";
              key   =   ftok(name,0);
              cout < <"###::" < <key < <endl;
              if(key==-1)
                                perror("ftok   error");
              shm_id=shmget(key,4096,IPC_CREAT ¦IPC_EXCL);
              if(shm_id==-1)
              {
                        printf("testa");
                        shm_id=shmget(key,4096,IPC_CREAT);
                        cout < <"###" < <shm_id;
                        if(shm_id==-1){
                                printf("testb");
                                perror("shmget   error");
                                exit(EXIT_FAILURE);
                        }
              }
              p_map=(Term*)shmat(shm_id,NULL,0);
              if   (p_map   ==   (Term   *)   -1)   {
                  printf("shmat   error   !\n");
                  return   (2);
              }
              printf("hex:%x",p_map);
              printf("\n </html> \n"   );
              return   0;
}
红色部分是共享内存在CGI中的测试!
经过日志查看好象不是权限的问题了!
SHM_ID正确,红色部分的代码在C程序中独立运行正常,在CGI中运行的话SHMAT返回-1(ffffffff)
不知道问题出哪儿?



问题已经解决:)
#ipcs 查看共享内存SHMATID 的PERM权限号码
然后使用IPCRM清楚对应的共享内存将写和读的权限设置为一致(我的程序里设置0666)
这个问题可以从ERRNO得到,13是权限问题!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值