- 论坛徽章:
- 0
|
疑问有以下几点:
1.由于共享内存不会随着进程的释放而释放,那么需要在进程的结尾使用shmdt断开共享内存连接吗?(PS:这里的进程指单进程而非多进程)
2.共享内存伴随程序第二次运行,无法从共享内存中读取数据,本人使用的是固定的KEY来创建的内存,在进程结尾断开连接。
这样是否就意味着共享内存中的东西自动会消失?
3.共享内存是否是主要运用于多线程中?
之所以有以上几点疑问是因为在程序中运行共享内存结果不如意。废话不多说。直接上代码。
/********************************************
*
* Name: shmcopy.c
*
* Funtion:
*
*
* Time:2014-10-09
*
********************************************/
#include "fpfmipc.h"
#include "ourhdr.h"
#include <fcntl.h>
int createfile( char* pathname );
int main( int argc,char* argv[] )
{
int filedes;
int shmid;
pid_t pid;
/*** 自定义初始化共享内存结构 ****/
databuf_s *buf1,*buf2;
/*** 参数区控制 ***/
if ( argc != 3 && argc != 2)
{
usage(); //提示函数
return -1;
}
if ( argc == 3 )
{
if ( filedes=createfile( argv[2] ) < 0 )
err_sys("createfile error");
return -1;
}
/* 创建并连接共享内存*/
if ( shmid=getseg(&buf1) < 0 )
{
err_sys("getseg error:");
return -1;
}
/* 打开文件 */
switch ( tolower(argv[1][0]) )
{
case 'w':
writer( buf1,filedes ); //将共享区数据中写入文件
break;
case 'r':
reader( buf1,filedes ); //从文件中读取数据到共享区
break;
case 'd':
shmctl( shmid ,IPC_RMID, 0 );
printf("Remove Share Memory\n");
default:
usage();
}
/** 断开连接 ****/
if ( shmdt( (char*)buf1 ) < 0 )
{
err_sys("shmdt error");
return -1;
}
/*******
switch(pid=fork())
{
case -1:
err_sys("fork");
case 0:
writer(semid,buf1,buf2);
removeshm();
break;
default:
reader(semid,buf1,buf2);
break;
}
****/
exit(0);
}
运行结果后 使用ipcs -am 中并没有显示新的share memory
|
|