资源简介
仅可用于科研学习目的,切勿用于商业或论文发表。
代码片段和文件信息
/*
* Some functions callable from fortran to use shared memory
* wv 2011
* shmem stuff from Willem Vermin SARA
*/
#include
#include
#include
#include
#include
#include
/*
* get a shared memory segment
* input: size (fortran integer*8)
* output: shmem id
*/
void getshmem_(size_t *size int*id)
{
key_t key;
int shmflg;
int shmid;
key = IPC_PRIVATE;
shmflg = IPC_CREAT | IPC_EXCL | 0600 | SHM_NORESERVE ;
shmid = shmget(key *size shmflg);
if (shmid == -1)
{
fprintf(stderr“%s in %s: cannot create shared segment %ld \n“__FUNCTION____FILE__*size);
perror(0);
exit(1);
}
*id = shmid;
}
void getshmem_error_(size_t *size int*id)
{
key_t key;
int shmflg;
int shmid;
key = IPC_PRIVATE;
shmflg = IPC_CREAT | IPC_EXCL | 0600 | SHM_NORESERVE ;
shmid = shmget(key *size shmflg);
*id = shmid;
}
/*
* attach shared memory to a pointer
* input: shhmid: shared memory id
* output: address (fortran integer*8)
*/
void attachshmem_(int *shmid void **address)
{
void *shmaddr*r;
int shmflg;
shmflg = 0;
shmaddr = 0;
r = shmat(*shmid shmaddr shmflg);
if (r == (void*) -1)
{
fprintf(stderr“%s in %s: cannot get address of shared segment\n“__FUNCTION____FILE__);
perror(0);
exit(1);
}
*address = r;
}
/*
* detach shared memory from pointer
* input: address (fortran integer*8)
*/
void detachshmem_(void **address)
{
int r;
r = shmdt(*address);
if (r == -1)
{
fprintf(stderr“%s in %s:%d: cannot detach shared segment\n“__FUNCTION____FILE____LINE__);
perror(0);
exit(1);
}
}
/*
* destroy shared memory
* input: shmid: shared memory id
*/
void destroyshmem_(int *shmid)
{
struct shmid_ds buf;
int r = shmctl(*shmidIPC_RMID&buf);
if (r == -1)
{
fprintf(stderr“%s in %s:%d: cannot destroy shared segment\n“__FUNCTION____FILE____LINE__);
perror(0);
exit(1);
}
}
/*
* get a set of semaphores
* input: size
* output: semaphores id
*/
void getsem_(int *size int*id)
{
key_t key;
int semflg;
int semid;
int mysize;
int i rc;
short sarray[(*size)+1];
key = IPC_PRIVATE;
semflg = IPC_CREAT | IPC_EXCL | 0600;
semflg = IPC_CREAT | 0600;
mysize=(*size)+1 ;
/* here I have an odd problem: using *size+1 instead of mysize
sometimes failed
very odd some cross C-Fortran problem no idea */
semid = semget(key mysize semflg);
if (semid == -1)
{
perror(0);
fprintf(stderr“%s in %s: cannot create semaphores \n“__FUNCTION____FILE__);
fprintf(stderr“requested size was %d\n“ mysize);
exit(1);
}
/* ‘1‘ -- The shared memory segment is being used. */
/* ‘0‘ -- The shared memory segment is freed. */
/* the very first sempaphore can be used to loc all others
currently this is not entirely thread save and might fail if no barrier
is used before this lock since we do not
- 上一篇:《企业进销存管理系统》论文范例
- 下一篇:旅游网站 asp 毕业设计
相关资源
- WEB在线考试系统商业无限制ASP源代码
- Mysql asp.net 数据库管理源代码
- asp酒店管理系统源代码
- 仓库管理系统 asp源代码
- 毕业答辩-ASP网上办公自动化系统(源
- 毕业答辩-ASP药店信息管理系统(源代
- 毕业答辩-ASP基于web的学校新闻发布系
- 中国分类信息网源代码
- VASP ----
- vasp.5.3.2.tar.gz
- 毕业答辩-asp网上体育用品商店的设计
- 毕业答辩-ASP在线考试系统毕业设计(
- 毕业答辩-ASP基于RSA的数字签名的设计
- 毕业答辩-基于ASP网络办公OA系统设计
- 毕业答辩-ASP毕业生信息管理系统设计
- 毕业答辩-ASP网络购物系统(源代码论
- 毕业答辩-ASP基于BS的家教交流平台的
- 毕业答辩-ASP综合性网站设计与实现(
- 毕业答辩-ASP音乐网站的设计与实现(
- 毕业答辩-基于ASP酒店客房管理系统设
- VASP:5.4.4版本.tar.gz格式
- 网上商城 ASP源码
- eWebEditor Version 8.5 for ASP 多语言商业版
- vasp.5.4.4&beef-src.tar.xz
- vasp 5.2.12.tar.gz
- ASP+ACCESS学生信息管理系统设计(源代
- ASP音乐网站的设计与实现(源代码+论
- ASP+SQL网上购物商城源代码+毕业论文
- 经典婚纱摄影网站源代码
- 第一原理电子结构计算程序VASP实用教
评论
共有 条评论