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是权限问题!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)