进程A
int main(){ SSL_CTX * ctx = nullptr;
ctx = CreateSSL();
key_t key = ftok(PATH,PRO_ID); 如果(键<0) { cout <<“ ftok错误!” << endl; 返回; }
int shmid = shmget(key,SHM_SIZE,IPC_CREAT | 0666); 如果(shmid <0) { cout <<“ shm错误!” << endl; 返回; }
void * buff = shmat(shmid,0,0); memset(buff,0,sizeof(SSL_CTX)); memcpy(buff,ctx,sizeof(SSL_CTX));
sleep(60);
shmdt(buff); shmctl(shmid,IPC_RMD,NULL);
返回0; }
过程B
int main() { SSL_CTX * ctx = nullptr;
key_t key = ftok(PATH,PRO_ID); 如果(键<0) { cout <<“ ftok错误!” << endl; 返回; }
int shmid = shmget(key,0,0); 如果(shmid <0) { cout <<“ shm错误!” << endl; 返回; }
void * buff = shmat(shmid,0,0); memcpy(ctx,buff,sizeof(SSL _CTX));
SSL * ssl = SSL_new(ctx);
/ * 做某事 * /
返回0; }
看这段代码。 我在进程A中创建了一个SSL_CTX * ctx,进程B通过shm得到了它,memcpy函数无法将ctx复制到buff中。 系统信号为SIGSEGV,具有: memcpy(ctx,buff,sizeof(SSL _CTX));
我该怎么办? 可以将buff复制到ctx。