乐哈哈旅游视频网:

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是权限问题!
posted on 2008-02-04 16:11  riky  阅读(1367)  评论(1编辑  收藏  举报

乐哈哈旅游视频网: