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是权限问题!
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是权限问题!