Compare commits
17 Commits
libshmem-1
...
0e2be6c11b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e2be6c11b | ||
|
|
998062740e | ||
|
|
7fb191ce32 | ||
|
|
168b1818c6 | ||
|
|
736a074b28 | ||
|
|
a71fd35b9e | ||
|
|
193e13bc58 | ||
|
|
c89aef3694 | ||
|
|
d956060f49 | ||
|
|
1f4d73bc70 | ||
|
|
8e908f867c | ||
|
|
cf00c637c7 | ||
|
|
b51a87426d | ||
|
|
8b84ce1517 | ||
|
|
4cfc687710 | ||
|
|
d05bee0900 | ||
|
|
bb73fb28cc |
25
Makefile
Normal file
25
Makefile
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# $RCSfile: Makefile,v $
|
||||||
|
# $Revision: 1.2 $
|
||||||
|
# $Name: $
|
||||||
|
# $Date: 2005/06/26 23:04:11 $
|
||||||
|
# $Author: agibert $
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Main Makefile
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUBDIRS := include lib util demo doc
|
||||||
|
|
||||||
|
FILE_DOC := *.txt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include Makefile.var
|
||||||
|
include Makefile.rule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dir_clean:
|
||||||
|
$(RM) $(PROG_VERSION_NAME).src.*
|
||||||
359
Makefile.rule
Normal file
359
Makefile.rule
Normal file
@@ -0,0 +1,359 @@
|
|||||||
|
# $RCSfile: Makefile.rule,v $
|
||||||
|
# $Revision: 1.1 $
|
||||||
|
# $Name: $
|
||||||
|
# $Date: 2005/01/24 23:24:30 $
|
||||||
|
# $Author: agibert $
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Rule Makefile
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------- DEFAULT RULES ---------------------
|
||||||
|
default:all
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------- IMPLICITES RULES ---------------------
|
||||||
|
|
||||||
|
# Here are all the rules allowing to compile sources files
|
||||||
|
# c -> o
|
||||||
|
%.o:%.c
|
||||||
|
$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
|
||||||
|
|
||||||
|
# c -> executable
|
||||||
|
.c :
|
||||||
|
$(CC) $(CFLAGS) $(INCLUDE) $< -o $@ -I . $(LIB)
|
||||||
|
|
||||||
|
# o -> executable
|
||||||
|
%:%.o
|
||||||
|
$(CC) $(LFLAGS) -o $@ $? $(LIB)
|
||||||
|
|
||||||
|
# .o -> .so
|
||||||
|
%.so:%.o
|
||||||
|
$(CC) $(LDSOFLAGS) -shared -o $@ $? $(LIB)
|
||||||
|
|
||||||
|
%.a:%.o
|
||||||
|
$(AR) -r $@ $?
|
||||||
|
|
||||||
|
$(OBJECTS) : $(SRC)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "depend" rule allow to build the dependancy file
|
||||||
|
depend:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "all" Rule
|
||||||
|
all: dir_all
|
||||||
|
ifneq ($(SUBDIRS),)
|
||||||
|
for d in $(SUBDIRS) ; do $(MAKE) all -C $$d/ ; done
|
||||||
|
endif
|
||||||
|
|
||||||
|
dir_all: $(TARGETS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "clean" Rule
|
||||||
|
clean: dir_clean
|
||||||
|
ifneq ($(SUBDIRS),)
|
||||||
|
for d in $(SUBDIRS) ; do $(MAKE) clean -C $$d/ ; done
|
||||||
|
endif
|
||||||
|
|
||||||
|
dir_clean:
|
||||||
|
@(command="$(RM) $(TARGETS) $$(echo $(SRC) | sed "s/\.c/\.o/g") ;" ; \
|
||||||
|
echo $$command ; \
|
||||||
|
eval $$command ;)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "pre_install" Rule
|
||||||
|
# This empty rule can be overiden in module Makefile in order to run pre-install commands.
|
||||||
|
pre_install:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "post_install" Rule
|
||||||
|
# This empty rule can be overiden in module Makefile in order to run post-install commands.
|
||||||
|
post_install:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "install" Rule
|
||||||
|
install: dir_install
|
||||||
|
ifneq ($(SUBDIRS),)
|
||||||
|
for d in $(SUBDIRS) ; do $(MAKE) install -C $$d/ ; done
|
||||||
|
endif
|
||||||
|
|
||||||
|
dir_install: dir_all
|
||||||
|
$(MAKE) pre_install
|
||||||
|
ifneq ($(FILE_BIN),)
|
||||||
|
@if test ! -d $(PATH_BIN) ; then $(MKDIR) $(PATH_BIN) ; fi
|
||||||
|
$(INSTALLBIN) $(FILE_BIN) $(PATH_BIN)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_BINSUID),)
|
||||||
|
@if test ! -d $(PATH_BINSUID) ; then $(MKDIR) $(PATH_BINSUID) ; fi
|
||||||
|
$(INSTALLBINSUID) $(FILE_BINSUID) $(PATH_BINSUID)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_CGI),)
|
||||||
|
@if test ! -d $(PATH_CGI) ; then $(MKDIR) $(PATH_CGI) ; fi
|
||||||
|
$(INSTALLCGI) $(FILE_CGI) $(PATH_CGI)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_DOC),)
|
||||||
|
@if test ! -d $(PATH_DOC) ; then $(MKDIR) $(PATH_DOC) ; fi
|
||||||
|
$(INSTALLDOC) $(FILE_DOC) $(PATH_DOC)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_ETC),)
|
||||||
|
@if test ! -d $(PATH_ETC) ; then $(MKDIR) $(PATH_ETC) ; fi
|
||||||
|
$(INSTALLETC) $(FILE_ETC) $(PATH_ETC)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HOME),)
|
||||||
|
@if test ! -d $(PATH_HOME) ; then $(MKDIR) $(PATH_HOME) ; fi
|
||||||
|
$(INSTALLHOME) $(FILE_HOME) $(PATH_HOME)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HOMEBIN),)
|
||||||
|
@if test ! -d $(PATH_HOMEBIN) ; then $(MKDIR) $(PATH_HOMEBIN) ; fi
|
||||||
|
$(INSTALLHOMEBIN) $(FILE_HOMEBIN) $(PATH_HOMEBIN)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_LIB),)
|
||||||
|
@if test ! -d $(PATH_LIB) ; then $(MKDIR) $(PATH_LIB) ; fi
|
||||||
|
$(INSTALLLIB) $(FILE_LIB) $(PATH_LIB)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HOMELIB),)
|
||||||
|
@if test ! -d $(PATH_HOMELIB) ; then $(MKDIR) $(PATH_HOMELIB) ; fi
|
||||||
|
$(INSTALLHOMELIB) $(FILE_HOMELIB) $(PATH_HOMELIB)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_INCLUDE),)
|
||||||
|
@if test ! -d $(PATH_INCLUDE) ; then $(MKDIR) $(PATH_INCLUDE) ; fi
|
||||||
|
$(INSTALLINCLUDE) $(FILE_INCLUDE) $(PATH_INCLUDE)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_MAN),)
|
||||||
|
@for d in $(FILE_MAN) ; do \
|
||||||
|
if test ! -d $(PATH_MAN)/$(FILE_MAN) ; then \
|
||||||
|
$(MKDIR) $(PATH_MAN)/$(FILE_MAN) ; \
|
||||||
|
fi ; \
|
||||||
|
$(INSTALLMAN) $(FILE_MAN)/* $(PATH_MAN)/$(FILE_MAN) ; \
|
||||||
|
done
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_WEBCONF),)
|
||||||
|
@if test ! -d $(PATH_WEBCONF) ; then $(MKDIR) $(PATH_WEBCONF) ; fi
|
||||||
|
$(INSTALLWEBCONF) $(FILE_WEBCONF) $(PATH_WEBCONF)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_WEBCONFSSL),)
|
||||||
|
@if test ! -d $(PATH_WEBCONFSSL) ; then $(MKDIR) $(PATH_WEBCONFSSL) ; fi
|
||||||
|
$(INSTALLWEBCONFSSL) $(FILE_WEBCONFSSL) $(PATH_WEBCONFSSL)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HTML),)
|
||||||
|
@if test ! -d $(PATH_HTML) ; then $(MKDIR) $(PATH_HTML) ; fi
|
||||||
|
$(INSTALLHTML) $(FILE_HTML) $(PATH_HTML)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_WEBICONS),)
|
||||||
|
@if test ! -d $(PATH_WEBICONS) ; then $(MKDIR) $(PATH_WEBICONS) ; fi
|
||||||
|
$(INSTALLWEBICONS) $(FILE_WEBICONS) $(PATH_WEBICONS)
|
||||||
|
endif
|
||||||
|
$(MAKE) post_install
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "pre_uninstall" Rule
|
||||||
|
# This empty rule can be overiden in module Makefile in order to run pre-uninstall commands.
|
||||||
|
|
||||||
|
pre_uninstall:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "post_uninstall" Rule
|
||||||
|
# This empty rule can be overiden in module Makefile in order to run post-uninstall commands.
|
||||||
|
post_uninstall:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "uninstall" Rule
|
||||||
|
uninstall: dir_uninstall
|
||||||
|
ifneq ($(SUBDIRS),)
|
||||||
|
for d in $(SUBDIRS) ; do $(MAKE) uninstall -C $$d/ ; done
|
||||||
|
endif
|
||||||
|
|
||||||
|
dir_uninstall:
|
||||||
|
$(MAKE) pre_uninstall
|
||||||
|
ifneq ($(FILE_BIN),)
|
||||||
|
@(if test -d $(PATH_BIN) ; then \
|
||||||
|
$(CD) $(PATH_BIN) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_BIN)" ; \
|
||||||
|
echo "$(RM) $(FILE_BIN)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_BIN) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_BINSUID),)
|
||||||
|
@(if test -d $(PATH_BINSUID) ; then \
|
||||||
|
$(CD) $(PATH_BINSUID) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_BINSUID)" ; \
|
||||||
|
echo "$(RM) $(FILE_BINSUID)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_BINSUID) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_CGI),)
|
||||||
|
@(if test -d $(PATH_CGI) ; then \
|
||||||
|
$(CD) $(PATH_CGI) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_CGI)" ; \
|
||||||
|
echo "$(RM) $(FILE_CGI)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_CGI) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_DOC),)
|
||||||
|
@(if test -d $(PATH_DOC) ; then \
|
||||||
|
$(CD) $(PATH_DOC) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_DOC)" ; \
|
||||||
|
echo "$(RM) $(FILE_DOC)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_DOC) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_ETC),)
|
||||||
|
@(if test -d $(PATH_ETC) ; then \
|
||||||
|
$(CD) $(PATH_ETC) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_ETC)" ; \
|
||||||
|
echo "$(RM) $(FILE_ETC)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_ETC) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HOME),)
|
||||||
|
@(if test -d $(PATH_HOME) ; then \
|
||||||
|
$(CD) $(PATH_HOME) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_HOME)" ; \
|
||||||
|
echo "$(RM) $(FILE_HOME)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_HOME) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HOMEBIN),)
|
||||||
|
@(if test -d $(PATH_HOMEBIN) ; then \
|
||||||
|
$(CD) $(PATH_HOMEBIN) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_HOMEBIN)" ; \
|
||||||
|
echo "$(RM) $(FILE_HOMEBIN)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_HOMEBIN) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_LIB),)
|
||||||
|
@(if test -d $(PATH_LIB) ; then \
|
||||||
|
$(CD) $(PATH_LIB) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_LIB)" ; \
|
||||||
|
echo "$(RM) $(FILE_LIB)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_LIB) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HOMELIB),)
|
||||||
|
@(if test -d $(PATH_HOMELIB) ; then \
|
||||||
|
$(CD) $(PATH_HOMELIB) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_HOMELIB)" ; \
|
||||||
|
echo "$(RM) $(FILE_HOMELIB)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_HOMELIB) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_INCLUDE),)
|
||||||
|
@(if test -d $(PATH_INCLUDE) ; then \
|
||||||
|
$(CD) $(PATH_INCLUDE) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_INCLUDE)" ; \
|
||||||
|
echo "$(RM) $(FILE_INCLUDE)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_INCLUDE) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_MAN),)
|
||||||
|
@(if test -d $(PATH_MAN) ; then \
|
||||||
|
$(CD) $(PATH_MAN) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_MAN)" ; \
|
||||||
|
echo "$(RM) $(FILE_MAN)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_MAN) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_WEBCONF),)
|
||||||
|
@(if test -d $(PATH_WEBCONF) ; then \
|
||||||
|
$(CD) $(PATH_WEBCONF) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_WEBCONF)" ; \
|
||||||
|
echo "$(RM) $(FILE_WEBCONF)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_WEBCONF) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_WEBCONFSSL),)
|
||||||
|
@(if test -d $(PATH_WEBCONFSSL) ; then \
|
||||||
|
$(CD) $(PATH_WEBCONFSSL) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_WEBCONFSSL)" ; \
|
||||||
|
echo "$(RM) $(FILE_WEBCONFSSL)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_WEBCONFSSL) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_HTML),)
|
||||||
|
@(if test -d $(PATH_HTML) ; then \
|
||||||
|
$(CD) $(PATH_HTML) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_HTML)" ; \
|
||||||
|
echo "$(RM) $(FILE_HTML)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_HTML) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
ifneq ($(FILE_WEBICONS),)
|
||||||
|
@(if test -d $(PATH_WEBICONS) ; then \
|
||||||
|
$(CD) $(PATH_WEBICONS) ; \
|
||||||
|
(echo $(MAKEFLAGS) | grep s) > /dev/null ; \
|
||||||
|
if [ $$? -ne 0 ] ; then \
|
||||||
|
echo "$(CD) $(PATH_WEBICONS)" ; \
|
||||||
|
echo "$(RM) $(FILE_WEBICONS)" ; \
|
||||||
|
fi ; \
|
||||||
|
$(RM) $(FILE_WEBICONS) ; \
|
||||||
|
fi)
|
||||||
|
endif
|
||||||
|
$(MAKE) post_uninstall
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# "distrib" Rule
|
||||||
|
distrib:
|
||||||
|
$(MAKE) clean
|
||||||
|
$(MKDIR) $(TMP_DIR)/$(PROG_VERSION_NAME)
|
||||||
|
$(TAR) cf - . | $(TAR) xvpf - -C $(TMP_DIR)/$(PROG_VERSION_NAME)
|
||||||
|
$(TAR) cvf - -C $(TMP_DIR) --exclude CVS $(PROG_VERSION_NAME) | $(GZIP) -9 >$(PROG_VERSION_NAME).src.tgz
|
||||||
|
$(TAR) cvf - -C $(TMP_DIR) --exclude CVS $(PROG_VERSION_NAME) | $(BZIP2) -9 >$(PROG_VERSION_NAME).src.tbz2
|
||||||
|
$(MV) $(TMP_DIR)/$(PROG_VERSION_NAME) .
|
||||||
|
$(ZIP) -r -m -9 $(PROG_VERSION_NAME).src.zip $(PROG_VERSION_NAME) -x \*/CVS/\*
|
||||||
|
$(RM) -r $(PROG_VERSION_NAME)
|
||||||
92
Makefile.var
Normal file
92
Makefile.var
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# $RCSfile: Makefile.var,v $
|
||||||
|
# $Revision: 1.1 $
|
||||||
|
# $Name: $
|
||||||
|
# $Date: 2005/01/24 23:24:30 $
|
||||||
|
# $Author: agibert $
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Variable Makefile
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PROG_NAME=libshmem
|
||||||
|
PROG_TAG=$Name: $
|
||||||
|
|
||||||
|
ifeq ($(words $(PROG_TAG)),2)
|
||||||
|
PROG_VERSION_NAME=$(subst _,.,$(word 2, $(PROG_TAG)))
|
||||||
|
else
|
||||||
|
PROG_VERSION_NAME=$(PROG_NAME)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CC=/usr/bin/gcc
|
||||||
|
AR=/usr/bin/ar
|
||||||
|
|
||||||
|
CD=cd
|
||||||
|
MKDIR=/bin/mkdir -p
|
||||||
|
RM=/bin/rm -f
|
||||||
|
MV=/bin/mv
|
||||||
|
TAR=tar
|
||||||
|
GZIP=gzip
|
||||||
|
BZIP2=bzip2
|
||||||
|
ZIP=zip
|
||||||
|
|
||||||
|
PATH_WEB=$(addprefix /var/httpd/, $(PROG_NAME))
|
||||||
|
|
||||||
|
INSTALLBIN=/usr/bin/install -m 755
|
||||||
|
INSTALLBINSUID=/usr/bin/install -m 4755
|
||||||
|
INSTALLCGI=/usr/bin/install -m 555
|
||||||
|
INSTALLDOC=/usr/bin/install -m 444
|
||||||
|
INSTALLETC=/usr/bin/install -m 600
|
||||||
|
INSTALLHOME=/usr/bin/install -m 400
|
||||||
|
INSTALLHOMEBIN=/usr/bin/install -m 750
|
||||||
|
INSTALLLIB=/usr/bin/install -m 755
|
||||||
|
INSTALLHOMELIB=/usr/bin/install -m 755
|
||||||
|
INSTALLINCLUDE=/usr/bin/install -m 644
|
||||||
|
INSTALLMAN=/usr/bin/install -m 644
|
||||||
|
INSTALLWEBCONF=/usr/bin/install -m 644
|
||||||
|
INSTALLWEBCONFSSL=/usr/bin/install -m 644
|
||||||
|
INSTALLHTML=/usr/bin/install -m 444
|
||||||
|
INSTALLWEBICONS=/usr/bin/install -m 444
|
||||||
|
|
||||||
|
ifeq ($(ROOT),)
|
||||||
|
HOME_DIR := /
|
||||||
|
else
|
||||||
|
HOME_DIR := $(ROOT)
|
||||||
|
endif
|
||||||
|
|
||||||
|
PATH_BIN := $(addprefix $(HOME_DIR),/usr/bin)
|
||||||
|
PATH_BINSUID := $(PATH_BIN)
|
||||||
|
PATH_CGI := $(addprefix $(HOME_DIR),$(addprefix $(PATH_WEB),/cgi-bin))
|
||||||
|
PATH_DOC := $(addprefix $(HOME_DIR),$(addprefix /usr/share/doc/,$(PROG_VERSION_NAME)))
|
||||||
|
PATH_ETC := $(addprefix $(HOME_DIR),$(addprefix /etc/,$(MODULE)))
|
||||||
|
PATH_HOME := $(addprefix $(HOME_DIR),$(addprefix $(addprefix /var/lib/, $(PROG_NAME)), $(MODULE)))
|
||||||
|
PATH_HOMEBIN := $(addprefix $(HOME_DIR), $(addprefix $(addprefix /var/lib/, $(PROG_NAME)), /bin))
|
||||||
|
PATH_LIB := $(addprefix $(HOME_DIR),/usr/lib)
|
||||||
|
PATH_HOMELIB := $(addprefix $(HOME_DIR), $(addprefix $(addprefix /var/lib/, $(PROG_NAME)), /lib))
|
||||||
|
PATH_INCLUDE := $(addprefix $(HOME_DIR),/usr/include)
|
||||||
|
PATH_MAN := $(addprefix $(HOME_DIR),/usr/share/man)
|
||||||
|
PATH_WEBCONF := $(addprefix $(HOME_DIR),/etc/httpd/conf/vhosts)
|
||||||
|
PATH_WEBCONFSSL := $(addprefix $(HOME_DIR),/etc/httpd/conf/ssl)
|
||||||
|
PATH_HTML := $(addprefix $(HOME_DIR),$(addprefix $(addprefix $(PATH_WEB),/html/),$(MODULE)))
|
||||||
|
PATH_WEBICONS := $(addprefix $(HOME_DIR),$(addprefix $(PATH_WEB),/icons))
|
||||||
|
|
||||||
|
PATH_LOG := $(addprefix $(HOME_DIR),/var/log)
|
||||||
|
|
||||||
|
TMP_DIR=/tmp
|
||||||
|
|
||||||
|
CFLAGS=
|
||||||
|
|
||||||
|
ifeq ($(DEBUG), YES)
|
||||||
|
CFLAGS += -g -D_DEBUG
|
||||||
|
endif
|
||||||
|
ifeq ($(DEBUG), Y)
|
||||||
|
CFLAGS += -g -D_DEBUG
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(OPTIM), YES)
|
||||||
|
CFLAGS += -O3
|
||||||
|
endif
|
||||||
|
ifeq ($(OPTIM), Y)
|
||||||
|
CFLAGS += -O3
|
||||||
|
endif
|
||||||
10
ReadMe.txt
10
ReadMe.txt
@@ -1,14 +1,14 @@
|
|||||||
# $RCSfile: ReadMe.txt,v $
|
# $RCSfile: ReadMe.txt,v $
|
||||||
# $Revision: 1.1 $
|
# $Revision: 2.0 $
|
||||||
# $Name: $
|
# $Name: $
|
||||||
# $Date: 2005/01/24 22:38:02 $
|
# $Date: 2005/01/24 23:58:23 $
|
||||||
# $Author: agibert $
|
# $Author: agibert $
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Welcome to LibShMem 1.0.x !
|
Welcome to LibShMem 2.0.x !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -18,9 +18,9 @@ This release of LibNode supports the following OS:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
The support of LibVer is not optional.
|
The support of LibVer is now optional (To enable it, use: make _LIBVER_SUPPORT=1 all).
|
||||||
|
|
||||||
LibShMem support LibNode 1.0.x and LibDataStr 1.0.x !
|
LibShMem support LibNode 2.1.x and LibDataStr 2.0.x (Not yet released) !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,24 @@
|
|||||||
# $RCSfile: ReleaseNotes.txt,v $
|
# $RCSfile: ReleaseNotes.txt,v $
|
||||||
# $Revision: 1.1 $
|
# $Revision: 2.1 $
|
||||||
# $Name: $
|
# $Name: $
|
||||||
# $Date: 2005/01/24 22:38:02 $
|
# $Date: 2005/06/27 00:17:36 $
|
||||||
# $Author: agibert $
|
# $Author: agibert $
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
LibShMem V 2.0.0 - A. Gibert - xx/06/05
|
||||||
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
All: This new LibShMem branch (2.0.x) support the new LibNode branch (2.1.x),
|
||||||
|
LibShMem: Add HP-UX 11 support,
|
||||||
|
Improve Manager structure in a more LibNode 2 way,
|
||||||
|
SMDemo0: Add a new demo !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
LibShMem V 1.0.0 - S. Mas / A. Gibert - 28/07/00
|
LibShMem V 1.0.0 - S. Mas / A. Gibert - 28/07/00
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
8
ToDo.txt
8
ToDo.txt
@@ -1,13 +1,15 @@
|
|||||||
# $RCSfile: ToDo.txt,v $
|
# $RCSfile: ToDo.txt,v $
|
||||||
# $Revision: 1.1 $
|
# $Revision: 2.0 $
|
||||||
# $Name: $
|
# $Name: $
|
||||||
# $Date: 2005/01/24 22:38:02 $
|
# $Date: 2005/01/24 23:58:23 $
|
||||||
# $Author: agibert $
|
# $Author: agibert $
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- Add LibNode 2.x.x support !
|
- Code cleanup,
|
||||||
|
- Add a demo program (a la nddemo0),
|
||||||
|
- Add a bench program (a la ndbench),
|
||||||
- New English documentation (man/tex),
|
- New English documentation (man/tex),
|
||||||
- Improve API consitency.
|
- Improve API consitency.
|
||||||
|
|||||||
81
demo/Makefile
Normal file
81
demo/Makefile
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
SRC := smdemo0.c smdemo0_snd.c smdemo0_rcv.c
|
||||||
|
TARGETS := smdemo0 smdemo0-c smdemo0-static smdemo0-static-c \
|
||||||
|
smdemo0_snd smdemo0_snd-c smdemo0_snd-static smdemo0_snd-static-c \
|
||||||
|
smdemo0_rcv smdemo0_rcv-c smdemo0_rcv-static smdemo0_rcv-static-c
|
||||||
|
FILE_BIN := smdemo0 smdemo0-c smdemo0-static smdemo0-static-c \
|
||||||
|
smdemo0_snd smdemo0_snd-c smdemo0_snd-static smdemo0_snd-static-c \
|
||||||
|
smdemo0_rcv smdemo0_rcv-c smdemo0_rcv-static smdemo0_rcv-static-c
|
||||||
|
FILE_LIB := smdemo0.dat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include ../Makefile.var
|
||||||
|
include ../Makefile.rule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DEP_STATIC += ../lib/libshmem.a ../../libnode/lib/libnode.a
|
||||||
|
DEP_DYNAMIC += ../lib/libshmem.so ../../libnode/lib/libnode.so
|
||||||
|
INCLUDE += -I . -I ../include -I ../../libnode/include
|
||||||
|
LIBDIR += -L . -L ../lib -L ../../libnode/lib
|
||||||
|
LIB_STATIC += ../lib/libshmem.a ../../libnode/lib/libnode.a -ldl
|
||||||
|
LIB_DYNAMIC += -lshmem -lnode -ldl
|
||||||
|
CFLAGS += -rdynamic
|
||||||
|
|
||||||
|
ifdef _LIBVER_SUPPORT
|
||||||
|
DEP_STATIC += ../../libver/ver.h ../../libver/libver.a
|
||||||
|
DEP_DYNAMIC += ../../libver/ver.h ../../libver/libver.so
|
||||||
|
INCLUDE += -I ../../libver/lib
|
||||||
|
LIBDIR += -L ../../libver/lib
|
||||||
|
|
||||||
|
ifeq ($(OSTYPE),linux-gnu)
|
||||||
|
LIB_STATIC += ../../libver/lib/libver.a
|
||||||
|
LIB_DYNAMIC += -lver
|
||||||
|
else
|
||||||
|
LIB_STATIC += ../../libver/lib/libver.a
|
||||||
|
LIB_DYNAMIC += -lver
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -D_LIBVER_SUPPORT
|
||||||
|
endif
|
||||||
|
|
||||||
|
ND_CHECK_FLAGS = -DND_MODE=0
|
||||||
|
ND_NOCHECK_FLAGS = -DND_MODE=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
smdemo0: smdemo0.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smdemo0-c: smdemo0.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smdemo0-static: smdemo0.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
|
|
||||||
|
smdemo0-static-c: smdemo0.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
|
|
||||||
|
smdemo0_snd: smdemo0_snd.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smdemo0_snd-c: smdemo0_snd.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smdemo0_snd-static: smdemo0_snd.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
|
|
||||||
|
smdemo0_snd-static-c: smdemo0_snd.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
|
|
||||||
|
smdemo0_rcv: smdemo0_rcv.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smdemo0_rcv-c: smdemo0_rcv.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smdemo0_rcv-static: smdemo0_rcv.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
|
|
||||||
|
smdemo0_rcv-static-c: smdemo0_rcv.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
380
demo/smdemo0.c
Normal file
380
demo/smdemo0.c
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $RCSfile: smdemo0.c,v $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $Revision: 1.1 $ */
|
||||||
|
/* $Name: $ */
|
||||||
|
/* $Date: 2005/06/26 23:16:38 $ */
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* This file is a program test of libshmem */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU Lesser General Public Licence as published by */
|
||||||
|
/* the Free Software Foundation; either version 2.1 of the License, or */
|
||||||
|
/* (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU Lesser General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU Lesser General Public License */
|
||||||
|
/* along with LibShMem; if not, write to the Free Software */
|
||||||
|
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <node.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef SM_MODE
|
||||||
|
# define SM_MODE 0 /* Utilisation des API sécurisés */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <shmem.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define LOG_ERROR 10
|
||||||
|
#define LOG_WARNING 20
|
||||||
|
#define LOG_INFO 30
|
||||||
|
#define LOG_TRACE 40
|
||||||
|
|
||||||
|
#define FATHER_ID 0
|
||||||
|
|
||||||
|
#define SON_SND_ID 1
|
||||||
|
#define SON_SND_NAME "snd"
|
||||||
|
|
||||||
|
#define SON_RCV_ID 2
|
||||||
|
#define SON_RCV_NAME "rcv"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define INST_MAX 256
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Log_Print( int, int, int, int, char *, ...);
|
||||||
|
|
||||||
|
int Do_Fork_Exec( char **, int, int, int, int *, int);
|
||||||
|
|
||||||
|
void Make_Son_Cmd_Name( char *, char *, char *);
|
||||||
|
|
||||||
|
int main( int , char **);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Log_Print( int Log_Level, int Verbose_Level, int Proc_Id, int Inst_Id, char *Format_Str, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *prompt[] = { "father", "snd", "rcv"};
|
||||||
|
int fmt_size = 255;
|
||||||
|
char fmt[ fmt_size + 1];
|
||||||
|
|
||||||
|
|
||||||
|
if( Log_Level <= Verbose_Level)
|
||||||
|
{
|
||||||
|
va_start( args, Format_Str);
|
||||||
|
|
||||||
|
if( Proc_Id == FATHER_ID)
|
||||||
|
{
|
||||||
|
snprintf( fmt, fmt_size, "%s: %s", prompt[Proc_Id], Format_Str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf( fmt, fmt_size, "%s%02d : %s", prompt[Proc_Id], Inst_Id, Format_Str);
|
||||||
|
}
|
||||||
|
|
||||||
|
vfprintf( stderr, fmt, args);
|
||||||
|
fflush( stderr);
|
||||||
|
|
||||||
|
va_end( args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int Do_Fork_Exec( char **ArgV_Tab, int Proc_Id, int Inst_Id, int Dir, int Pipe_Desc[2], int Verbose_Level)
|
||||||
|
{
|
||||||
|
pid_t pid;
|
||||||
|
int rc;
|
||||||
|
char cmd[1024] = "";
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
for( i = 0; ArgV_Tab[i] != NULL; i++)
|
||||||
|
{
|
||||||
|
if( i > 0)
|
||||||
|
{
|
||||||
|
strcat( cmd, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat( cmd, ArgV_Tab[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "Forking Inst_Id: (%d) Dir: (%d) Cmd: [%s]...\n", Inst_Id, Dir, cmd);
|
||||||
|
|
||||||
|
switch( pid = fork())
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, Proc_Id, Inst_Id, "PId: (%d) PPId: (%d) Exec_File: [%s]\n", getpid(), getppid(), ArgV_Tab[0]);
|
||||||
|
|
||||||
|
if( ( rc = close( Pipe_Desc[ 1 - Dir])) == -1)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Proc_Id, Inst_Id, "close() failed: (%d) !\n", errno);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( rc = dup2( Pipe_Desc[ Dir], Dir)) == -1)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Proc_Id, Inst_Id, "dup2() failed: (%d) !\n", errno);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( rc = execv( ArgV_Tab[0], ArgV_Tab)) == -1)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Proc_Id, Inst_Id, "execv() failed: (%d) !\n", errno);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
case -1:
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, Inst_Id, "fork() failed: (%d) !\n", errno);
|
||||||
|
|
||||||
|
return( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, FATHER_ID, Inst_Id, "PId: (%d) Son_PId: (%d)\n", getpid(), pid);
|
||||||
|
|
||||||
|
return( 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Make_Son_Cmd_Name( char *Son_Cmd_Name, char *Father_Cmd_Name, char *Son_Name)
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
|
||||||
|
|
||||||
|
if( ( ptr = strstr( Father_Cmd_Name, "-")) == NULL)
|
||||||
|
{
|
||||||
|
ptr = Father_Cmd_Name + strlen( Father_Cmd_Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
strncpy( Son_Cmd_Name, Father_Cmd_Name, ( ptr - Father_Cmd_Name));
|
||||||
|
Son_Cmd_Name[ ( ptr - Father_Cmd_Name)] = '\0';
|
||||||
|
strcat( Son_Cmd_Name, "_");
|
||||||
|
strcat( Son_Cmd_Name, Son_Name);
|
||||||
|
strcat( Son_Cmd_Name, ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main( int ArgC, char **ArgV)
|
||||||
|
{
|
||||||
|
char *Heap_Name;
|
||||||
|
int Inst_Nb;
|
||||||
|
int Chunk_Nb;
|
||||||
|
size_t Chunk_Size;
|
||||||
|
int Verbose_Level = 30;
|
||||||
|
|
||||||
|
SMT_Heap *heap_ptr;
|
||||||
|
size_t heap_size = 1024;
|
||||||
|
int locked;
|
||||||
|
SMT_Status status;
|
||||||
|
int rc;
|
||||||
|
int pipe_desc[2];
|
||||||
|
pid_t pid;
|
||||||
|
char *ptr;
|
||||||
|
char *argv_tab[10];
|
||||||
|
char son_cmd[256];
|
||||||
|
char inst_id_str[32];
|
||||||
|
char chunk_nb_str[32];
|
||||||
|
char chunk_size_str[32];
|
||||||
|
char verbose_level_str[32];
|
||||||
|
int inst_id;
|
||||||
|
short error = 0;
|
||||||
|
|
||||||
|
|
||||||
|
if( ArgC != 6)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Usage: %s Inst_Nb Heap_Name Chunck_Nb Chunk_Size Verbose_Level\n", ArgV[0]);
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Inst_Nb = atoi( ArgV[1]);
|
||||||
|
Heap_Name = ArgV[2];
|
||||||
|
Chunk_Nb = atoi( ArgV[3]);
|
||||||
|
Chunk_Size = atoi( ArgV[4]);
|
||||||
|
Verbose_Level = atoi( ArgV[5]);
|
||||||
|
|
||||||
|
if( Inst_Nb > INST_MAX)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Inst_Nb: (%d) > (%d) !\n", Inst_Nb, INST_MAX);
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, FATHER_ID, 0, "Inst_Nb: (%d) Heap_Name: [%s] Chunck_Nb: (%d) Chunck_Size: (%d) Verbose_Level: (%d)...\n",
|
||||||
|
Inst_Nb, Heap_Name, Chunk_Nb, Chunk_Size, Verbose_Level);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if( ( status = SM_Library_Open( 0, NULL, ( SMD_OPEN | SMD_DEBUG_ALL))) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Can't open LibShMem (%d) !\n", status);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "LibShMem opened !\n");
|
||||||
|
|
||||||
|
if( ( status = SM_Heap_Open( Heap_Name, &heap_ptr, heap_size, ( SMD_OPEN | SMD_CREATE | SMD_NO_LOCK), &locked)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Can't create heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "Heap opened !\n");
|
||||||
|
|
||||||
|
for( inst_id = 0, error = 0; ( inst_id < Inst_Nb) && ( error == 0); inst_id++)
|
||||||
|
{
|
||||||
|
if( pipe( pipe_desc) == -1)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Con't open pipe (%d) !\n", errno);
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argv_tab[0] = son_cmd;
|
||||||
|
Make_Son_Cmd_Name( argv_tab[0], ArgV[0], SON_SND_NAME);
|
||||||
|
|
||||||
|
argv_tab[1] = inst_id_str;
|
||||||
|
sprintf( argv_tab[1], "%d", inst_id);
|
||||||
|
|
||||||
|
argv_tab[2] = Heap_Name;
|
||||||
|
|
||||||
|
argv_tab[3] = chunk_nb_str;
|
||||||
|
sprintf( argv_tab[3], "%d", Chunk_Nb);
|
||||||
|
|
||||||
|
argv_tab[4] = chunk_size_str;
|
||||||
|
sprintf( argv_tab[4], "%d", Chunk_Size);
|
||||||
|
|
||||||
|
argv_tab[5] = verbose_level_str;
|
||||||
|
sprintf( argv_tab[5], "%d", Verbose_Level);
|
||||||
|
|
||||||
|
argv_tab[6] = NULL;
|
||||||
|
|
||||||
|
if( Do_Fork_Exec( argv_tab, SON_SND_ID, inst_id, 1, pipe_desc, Verbose_Level) == -1)
|
||||||
|
{
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
argv_tab[0] = son_cmd;
|
||||||
|
Make_Son_Cmd_Name( argv_tab[0], ArgV[0], SON_RCV_NAME);
|
||||||
|
|
||||||
|
argv_tab[1] = inst_id_str;
|
||||||
|
sprintf( argv_tab[1], "%d", inst_id);
|
||||||
|
|
||||||
|
argv_tab[2] = Heap_Name;
|
||||||
|
|
||||||
|
argv_tab[3] = verbose_level_str;
|
||||||
|
sprintf( argv_tab[3], "%d", Verbose_Level);
|
||||||
|
|
||||||
|
argv_tab[4] = NULL;
|
||||||
|
|
||||||
|
if( Do_Fork_Exec( argv_tab, SON_RCV_ID, inst_id, 0, pipe_desc, Verbose_Level) == -1)
|
||||||
|
{
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( rc = close( pipe_desc[ 0])) == -1)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "close() pipe[0] failed: (%d)\n", errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( rc = close( pipe_desc[ 1])) == -1)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "close() pipe[1] failed: (%d)\n", errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( error == 0)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "Waiting sons to complet...\n");
|
||||||
|
|
||||||
|
for( inst_id = 0; inst_id < ( Inst_Nb * 2); inst_id++)
|
||||||
|
{
|
||||||
|
pid = wait( NULL);
|
||||||
|
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "Son PId: (%d) exited !\n", pid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( ( status = SM_Heap_Lock( heap_ptr, SMD_WRITE, &locked)) != SMS_OK) && ( locked == TRUE))
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Can't lock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( status = SM_Heap_Close( heap_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Can't close heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "Heap closed !\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( status = SM_Library_Close( SMD_CLOSE)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, FATHER_ID, 0, "Can't close LibShMem (%d) !\n", status);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, FATHER_ID, 0, "LibShMem closed !\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
exit( 0);
|
||||||
|
}
|
||||||
204
demo/smdemo0_rcv.c
Normal file
204
demo/smdemo0_rcv.c
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $RCSfile: smdemo0_rcv.c,v $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $Revision: 1.1 $ */
|
||||||
|
/* $Name: $ */
|
||||||
|
/* $Date: 2005/06/26 23:16:38 $ */
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* This file is a program test of libshmem */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU Lesser General Public Licence as published by */
|
||||||
|
/* the Free Software Foundation; either version 2.1 of the License, or */
|
||||||
|
/* (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU Lesser General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU Lesser General Public License */
|
||||||
|
/* along with LibShMem; if not, write to the Free Software */
|
||||||
|
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <node.h>
|
||||||
|
|
||||||
|
#ifndef SM_MODE
|
||||||
|
# define SM_MODE 0 /* Utilisation des API sécurisés */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <shmem.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define LOG_ERROR 10
|
||||||
|
#define LOG_WARNING 20
|
||||||
|
#define LOG_INFO 30
|
||||||
|
#define LOG_TRACE 40
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Log_Print( int, int, int, char *, ...);
|
||||||
|
|
||||||
|
int main( int, char **);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Log_Print( int Log_Level, int Verbose_Level, int Inst_Id, char *Format_Str, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *prompt = "rcv";
|
||||||
|
int fmt_size = 255;
|
||||||
|
char fmt[fmt_size + 1];
|
||||||
|
|
||||||
|
|
||||||
|
if( Log_Level <= Verbose_Level)
|
||||||
|
{
|
||||||
|
va_start( args, Format_Str);
|
||||||
|
|
||||||
|
snprintf( fmt, fmt_size, "%s%02d : %s", prompt, Inst_Id, Format_Str);
|
||||||
|
vfprintf( stderr, fmt, args);
|
||||||
|
fflush( stderr);
|
||||||
|
|
||||||
|
va_end( args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main( int ArgC, char **ArgV)
|
||||||
|
{
|
||||||
|
int Inst_Id;
|
||||||
|
char *Heap_Name;
|
||||||
|
int Verbose_Level = 30;
|
||||||
|
|
||||||
|
SMT_Heap *heap_ptr;
|
||||||
|
int locked;
|
||||||
|
SMT_Status status = SMS_OK;
|
||||||
|
char *chunk_ptr;
|
||||||
|
int chunk_id = 0;
|
||||||
|
char input_str[100];
|
||||||
|
size_t input_size = 99;
|
||||||
|
|
||||||
|
|
||||||
|
if( ArgC != 4)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, 0, "Usage: %s Inst_Id Heap_Name Verbose_Level\n", ArgV[0]);
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Inst_Id = atoi( ArgV[1]);
|
||||||
|
Heap_Name = ArgV[2];
|
||||||
|
Verbose_Level = atoi( ArgV[3]);
|
||||||
|
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, Inst_Id, "Inst_Id: (%d) Heap_Name: [%s] Verbose_Level: (%d)...\n",
|
||||||
|
Inst_Id, Heap_Name, Verbose_Level);
|
||||||
|
fflush( stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if( ( status = SM_Library_Open( 0, NULL, ( SMD_OPEN | SMD_DEBUG_ALL))) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't open LibShMem (%d) !\n", status);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "LibShMem opened !\n");
|
||||||
|
|
||||||
|
if( ( status = SM_Heap_Open( Heap_Name, &heap_ptr, 0, ( SMD_OPEN | SMD_NO_LOCK), &locked)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't open heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Heap opened !\n");
|
||||||
|
|
||||||
|
while( ( fgets( input_str, input_size, stdin) != NULL) && ( status == SMS_OK))
|
||||||
|
{
|
||||||
|
if( ( chunk_ptr = (char *)atol( input_str)) == NULL)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Garbage on stdin [%s], skiping !\n", input_str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Received message: [%s] Id: (%d) Address: (%lu)\n", chunk_ptr, chunk_id, chunk_ptr);
|
||||||
|
|
||||||
|
chunk_id++;
|
||||||
|
|
||||||
|
if( ( ( status = SM_Heap_Lock( heap_ptr, SMD_WRITE, &locked)) != SMS_OK) && ( locked == TRUE))
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't lock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( status = SM_Chunk_Free( heap_ptr, chunk_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't free chunk (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Chunk: (%lu) freed !\n", chunk_ptr);
|
||||||
|
|
||||||
|
if( ( status = SM_Heap_Unlock( heap_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't unlock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, Inst_Id, "Number of message received: (%d) !\n", chunk_id);
|
||||||
|
|
||||||
|
if( ( ( status = SM_Heap_Lock( heap_ptr, SMD_WRITE, &locked)) != SMS_OK) && ( locked == TRUE))
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't lock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( status = SM_Heap_Close( heap_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't close heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Heap closed !\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( status = SM_Library_Close( SMD_CLOSE)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't close LibShMem (%d) !\n", status);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "LibShMem closed !\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
exit( 0);
|
||||||
|
}
|
||||||
204
demo/smdemo0_snd.c
Normal file
204
demo/smdemo0_snd.c
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $RCSfile: smdemo0_snd.c,v $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $Revision: 1.1 $ */
|
||||||
|
/* $Name: $ */
|
||||||
|
/* $Date: 2005/06/26 23:16:38 $ */
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* This file is a program test of libshmem */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU Lesser General Public Licence as published by */
|
||||||
|
/* the Free Software Foundation; either version 2.1 of the License, or */
|
||||||
|
/* (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU Lesser General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU Lesser General Public License */
|
||||||
|
/* along with LibShMem; if not, write to the Free Software */
|
||||||
|
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <node.h>
|
||||||
|
|
||||||
|
#ifndef SM_MODE
|
||||||
|
# define SM_MODE 0 /* Utilisation des API sécurisés */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <shmem.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define LOG_ERROR 10
|
||||||
|
#define LOG_WARNING 20
|
||||||
|
#define LOG_INFO 30
|
||||||
|
#define LOG_TRACE 40
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Log_Print( int, int, int, char *, ...);
|
||||||
|
|
||||||
|
int main( int ArgC, char **ArgV);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Log_Print( int Log_Level, int Verbose_Level, int Inst_Id, char *Format_Str, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char *prompt = "snd";
|
||||||
|
int fmt_size = 255;
|
||||||
|
char fmt[ fmt_size + 1];
|
||||||
|
|
||||||
|
|
||||||
|
if( Log_Level <= Verbose_Level)
|
||||||
|
{
|
||||||
|
va_start( args, Format_Str);
|
||||||
|
|
||||||
|
snprintf( fmt, fmt_size, "%s%02d : %s", prompt, Inst_Id, Format_Str);
|
||||||
|
vfprintf( stderr, fmt, args);
|
||||||
|
fflush( stderr);
|
||||||
|
|
||||||
|
va_end( args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main( int ArgC, char **ArgV)
|
||||||
|
{
|
||||||
|
int Inst_Id;
|
||||||
|
char *Heap_Name;
|
||||||
|
int Chunk_Nb;
|
||||||
|
size_t Chunk_Size;
|
||||||
|
int Verbose_Level = 30;
|
||||||
|
|
||||||
|
SMT_Heap *heap_ptr;
|
||||||
|
size_t heap_size = 1024;
|
||||||
|
int locked;
|
||||||
|
SMT_Status status;
|
||||||
|
char *chunk_ptr;
|
||||||
|
int chunk_id;
|
||||||
|
|
||||||
|
|
||||||
|
if( ArgC != 6)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, 0, "Usage: %s Inst_Id Heap_Name Chunck_Nb Chunk_Size Verbose_Level\n", ArgV[0]);
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Inst_Id = atoi( ArgV[1]);
|
||||||
|
Heap_Name = ArgV[2];
|
||||||
|
Chunk_Nb = atoi( ArgV[3]);
|
||||||
|
Chunk_Size = atoi( ArgV[4]);
|
||||||
|
Verbose_Level = atoi( ArgV[5]);
|
||||||
|
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, Inst_Id, "Inst_Id: (%d) Heap_Name: [%s] Chunck_Nb: (%d) Chunck_Size: (%d) Verbose_Level: (%d)...\n",
|
||||||
|
Inst_Id, Heap_Name, Chunk_Nb, Chunk_Size, Verbose_Level);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if( ( status = SM_Library_Open( 0, NULL, ( SMD_OPEN | SMD_DEBUG_ALL))) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't open LibShMem (%d) !\n", status);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "LibShMem opened !\n");
|
||||||
|
|
||||||
|
if( ( status = SM_Heap_Open( Heap_Name, &heap_ptr, heap_size, ( SMD_OPEN | SMD_NO_LOCK), &locked)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't open heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Heap opened !\n");
|
||||||
|
|
||||||
|
for( chunk_id = 0; ( chunk_id < Chunk_Nb) && ( status == SMS_OK); chunk_id++)
|
||||||
|
{
|
||||||
|
if( ( ( status = SM_Heap_Lock( heap_ptr, SMD_WRITE, &locked)) != SMS_OK) && ( locked == TRUE))
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't lock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( status = SM_Chunk_Alloc( heap_ptr, Chunk_Size, (void **)&chunk_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't alloc chunk (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( status = SM_Heap_Unlock( heap_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't unlock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Chunk allocated !\n");
|
||||||
|
|
||||||
|
snprintf( chunk_ptr, Chunk_Size, "Hello brother: (%d) !", chunk_id);
|
||||||
|
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Message: [%s] writen into the chunk: (%lu)\n", chunk_ptr, chunk_ptr);
|
||||||
|
|
||||||
|
fprintf( stdout, "%lu\n", chunk_ptr);
|
||||||
|
fflush( stdout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_Print( LOG_INFO, Verbose_Level, Inst_Id, "Number of message sendeded: (%d) !\n", chunk_id);
|
||||||
|
|
||||||
|
if( ( ( status = SM_Heap_Lock( heap_ptr, SMD_WRITE, &locked)) != SMS_OK) && ( locked == TRUE))
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't lock heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( status = SM_Heap_Close( heap_ptr)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't close heap (%d) !\n", status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "Heap closed !\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( status = SM_Library_Close( SMD_CLOSE)) != SMS_OK)
|
||||||
|
{
|
||||||
|
Log_Print( LOG_ERROR, Verbose_Level, Inst_Id, "Can't close LibShMem (%d) !\n", status);
|
||||||
|
|
||||||
|
exit( -1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log_Print( LOG_TRACE, Verbose_Level, Inst_Id, "LibShMem closed !\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
exit( 0);
|
||||||
|
}
|
||||||
5
doc/Makefile
Normal file
5
doc/Makefile
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FILE_DOC := libshmem.doc
|
||||||
|
FILE_MAN := man3
|
||||||
|
|
||||||
|
include ../Makefile.var
|
||||||
|
include ../Makefile.rule
|
||||||
6
include/Makefile
Normal file
6
include/Makefile
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
FILE_INCLUDE := shmem.h
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include ../Makefile.var
|
||||||
|
include ../Makefile.rule
|
||||||
202
include/shmem.h
202
include/shmem.h
@@ -1,3 +1,34 @@
|
|||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $RCSfile: shmem.h,v $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $Revision: 2.3 $ */
|
||||||
|
/* $Name: $ */
|
||||||
|
/* $Date: 2005/06/26 23:07:40 $ */
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* This file is part of LibShMem */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU Lesser General Public Licence as published by */
|
||||||
|
/* the Free Software Foundation; either version 2.1 of the License, or */
|
||||||
|
/* (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU Lesser General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU Lesser General Public License */
|
||||||
|
/* along with LibShMem; if not, write to the Free Software */
|
||||||
|
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _LIBSM
|
#ifndef _LIBSM
|
||||||
#define _LIBSM
|
#define _LIBSM
|
||||||
|
|
||||||
@@ -11,7 +42,7 @@ extern "C" {
|
|||||||
|
|
||||||
/* Code retour des fonctions constituant l'API */
|
/* Code retour des fonctions constituant l'API */
|
||||||
|
|
||||||
typedef long SMT_Status;
|
typedef long SMT_Status;
|
||||||
|
|
||||||
#define SMS_OK NDS_OK /* La fonction s'est correctement exécutée et a produit un résultat */
|
#define SMS_OK NDS_OK /* La fonction s'est correctement exécutée et a produit un résultat */
|
||||||
#define SMS_KO NDS_KO /* La fonction s'est correctement exécutée mais n'a pas produit de résultat */
|
#define SMS_KO NDS_KO /* La fonction s'est correctement exécutée mais n'a pas produit de résultat */
|
||||||
@@ -28,7 +59,7 @@ typedef long SMT_Status;
|
|||||||
|
|
||||||
#define SM_ERROR(s) ((s) < 0) /* Tous les codes retour négatifs correspondent à des erreurs */
|
#define SM_ERROR(s) ((s) < 0) /* Tous les codes retour négatifs correspondent à des erreurs */
|
||||||
|
|
||||||
typedef int SMT_Flags;
|
typedef int SMT_Flags;
|
||||||
|
|
||||||
#define SMD_UNDEF 0
|
#define SMD_UNDEF 0
|
||||||
|
|
||||||
@@ -59,12 +90,12 @@ typedef int SMT_Flags;
|
|||||||
|
|
||||||
/* Différentes types de configuration d'un heap */
|
/* Différentes types de configuration d'un heap */
|
||||||
|
|
||||||
typedef int SMT_Config;
|
typedef int SMT_Config;
|
||||||
|
|
||||||
#define SMD_SEGMENT_SIZE 1 /* Définir la taille des segments */
|
#define SMD_SEGMENT_SIZE 1 /* Définir la taille des segments */
|
||||||
#define SMD_HEAP_LIMIT 2 /* Définir la taille maximale */
|
#define SMD_HEAP_LIMIT 2 /* Définir la taille maximale */
|
||||||
#define SMD_AUTO_COMPRESS 3 /* Définir la taille d'un FCR à partir de laquelle
|
#define SMD_AUTO_COMPRESS 3 /* Définir la taille d'un FCR à partir de laquelle
|
||||||
la compression du heap est autmatiquement activée */
|
la compression du heap est autmatiquement activée */
|
||||||
|
|
||||||
#define SMD_DEFAULT_COMPRESS 1000 /* si + de 1000 chunks libres, alors compression du heap */
|
#define SMD_DEFAULT_COMPRESS 1000 /* si + de 1000 chunks libres, alors compression du heap */
|
||||||
|
|
||||||
@@ -85,7 +116,7 @@ typedef int SMT_Config;
|
|||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char SM_Error_Msg [512];
|
char SM_Error_Msg [512];
|
||||||
|
|
||||||
#ifndef SM_MODE
|
#ifndef SM_MODE
|
||||||
#define SM_MODE 0
|
#define SM_MODE 0
|
||||||
@@ -143,70 +174,71 @@ char SM_Error_Msg [512];
|
|||||||
/* Structure de la base de heaps */
|
/* Structure de la base de heaps */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int SysMemID; /* ID de la 1ère zone de mémoire partagée de la base */
|
int SysMemId; /* Id de la 1ère zone de mémoire partagée de la base */
|
||||||
int DataMemID; /* ID de la 2ème zone de mémoire partagée de la base */
|
int DataMemId; /* Id de la 2ème zone de mémoire partagée de la base */
|
||||||
size_t Size; /* Taille de la zone de mémoire partagée */
|
size_t Size; /* Taille de la zone de mémoire partagée */
|
||||||
int SemID; /* ID du sémaphore pour la gestion des verrous */
|
int SemId; /* Id du sémaphore pour la gestion des verrous */
|
||||||
NDT_Root * MHR; /* Memory Heap Root : racine de la liste de heap */
|
NDT_Root * MHR; /* Memory Heap Root : racine de la liste de heap */
|
||||||
pid_t Creator; /* ID du processus créateur de la base */
|
pid_t Creator; /* Id du processus créateur de la base */
|
||||||
pid_t Writer; /* ID du dernier processus ayant accédé en écriture à la base */
|
pid_t Writer; /* Id du dernier processus ayant accédé en écriture à la base */
|
||||||
void * Free; /* Pointeur sur la première zone libre de la base */
|
void * Free; /* Pointeur sur la première zone libre de la base */
|
||||||
void * Attach; /* Adresse du dernier attachement */
|
void * Attach; /* Adresse du dernier attachement */
|
||||||
size_t Segment_Size; /* Taille par défaut des segments qui composeront les heaps */
|
size_t Segment_Size; /* Taille par défaut des segments qui composeront les heaps */
|
||||||
} SMT_Base;
|
} SMT_Base;
|
||||||
|
|
||||||
/* Référence sur la base de heaps */
|
/* Référence sur la base de heaps */
|
||||||
|
|
||||||
SMT_Base * SM_Base;
|
SMT_Base * SM_Base;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Structure d'un MHH (Memory Heap Header) */
|
/* Structure d'un MHH (Memory Heap Header) */
|
||||||
/* Rappel : un MHH est une valeur attachée à un MHN (Memory Heap Node) */
|
/* Rappel : un MHH est une valeur attachée à un MHN (Memory Heap Node) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char Name [256]; /* Nom du heap */
|
char Name [256]; /* Nom du heap */
|
||||||
int SemID; /* ID du sémaphore pour la gestion des verrous */
|
int SemId; /* Id du sémaphore pour la gestion des verrous */
|
||||||
NDT_Root * DSR; /* Data Segment Root */
|
NDT_Root * DSR; /* Data Segment Root */
|
||||||
NDT_Root * ACR; /* Allocated Chunks Root */
|
NDT_Root * ACR; /* Allocated Chunks Root */
|
||||||
NDT_Root * FCR; /* Free Chunks Root */
|
NDT_Root * FCR; /* Free Chunks Root */
|
||||||
pid_t Writer; /* ID du processus ayant accédé en dernier au MHH en écriture */
|
pid_t Writer; /* Id du processus ayant accédé en dernier au MHH en écriture */
|
||||||
int State; /* Etat d'un heap (valide, non validé ou corrompu) */
|
int State; /* Etat d'un heap (valide, non validé ou corrompu) */
|
||||||
size_t Segment_Size; /* Taille des segments de mémoire composant le heap */
|
size_t Segment_Size; /* Taille des segments de mémoire composant le heap */
|
||||||
size_t Limit_Size; /* Taille limite du heap (par défaut : pas de limite) */
|
size_t Limit_Size; /* Taille limite du heap (par défaut : pas de limite) */
|
||||||
int Auto_Compress; /* Nombre de chunks libres à partir duquel le heap est automatiquement compressé */
|
int Auto_Compress; /* Nombre de chunks libres à partir duquel le heap est automatiquement compressé */
|
||||||
} SMT_MHH;
|
long Compress_Nb; /* Nomber of time the heap has been compressed */
|
||||||
|
} SMT_MHH;
|
||||||
|
|
||||||
/* Heap ouvert */
|
/* Heap ouvert */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char * Name;
|
char * Name;
|
||||||
SMT_MHH * MHH;
|
SMT_MHH * MHH;
|
||||||
SMT_Flags Lock_Mode; /* Mode dans lequel le heap est verrouillé */
|
SMT_Flags Lock_Mode; /* Mode dans lequel le heap est verrouillé */
|
||||||
int Nb_Seg; /* Nombre de segments du heap lors de son ouverture */
|
int Nb_Seg; /* Nombre de segments du heap lors de son ouverture */
|
||||||
} SMT_Heap;
|
} SMT_Heap;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Structure d'un DSH (Data Segment Header) */
|
/* Structure d'un DSH (Data Segment Header) */
|
||||||
/* Rappel : un DSH est une valeur attachée à un DSN (noeud de DSR) */
|
/* Rappel : un DSH est une valeur attachée à un DSN (noeud de DSR) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int MemID; /* ID de la zone de mémoire partagée */
|
int MemId; /* Id de la zone de mémoire partagée */
|
||||||
size_t Size; /* Taille de la zone de mémoire partagée */
|
size_t Size; /* Taille de la zone de mémoire partagée */
|
||||||
void * Start; /* Adresse de début de la zone de mémoire partagée */
|
void * Start; /* Adresse de début de la zone de mémoire partagée */
|
||||||
} SMT_DSH;
|
} SMT_DSH;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Structure d'un chunk */
|
/* Structure d'un chunk */
|
||||||
/* Rappel : un chunk est la valeur attachée à un noeud de ACR ou FCR */
|
/* Rappel : un chunk est la valeur attachée à un noeud de ACR ou FCR */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
size_t Size; /* Taille allouée au chunk */
|
size_t Size; /* Taille allouée au chunk */
|
||||||
void * Data; /* Adresse de la zone de données du chunk */
|
void * Data; /* Adresse de la zone de données du chunk */
|
||||||
} SMT_Chunk;
|
} SMT_Chunk;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Ouverture d'une instance de la librairie */
|
/* Ouverture d'une instance de la librairie */
|
||||||
@@ -215,68 +247,68 @@ typedef struct {
|
|||||||
/* (I) Context : nom du nouveau contexte */
|
/* (I) Context : nom du nouveau contexte */
|
||||||
/* (I) Flags : indicateur création/ouverture + mode d'affichage des erreurs */
|
/* (I) Flags : indicateur création/ouverture + mode d'affichage des erreurs */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Open_I ( int Instance, const char * Context, SMT_Flags Flags );
|
SMT_Status SM_Library_Open_I ( int Instance, const char * Context, SMT_Flags Flags );
|
||||||
SMT_Status SM_Library_Open_C ( int Instance, const char * Context, SMT_Flags Flags );
|
SMT_Status SM_Library_Open_C ( int Instance, const char * Context, SMT_Flags Flags );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Récupération du numéro de l'instance utilisée */
|
/* Récupération du numéro de l'instance utilisée */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (O) Instance : adresse du numéro de l'instance utilisée */
|
/* (O) Instance : adresse du numéro de l'instance utilisée */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Instance_Get_I ( int * Instance);
|
SMT_Status SM_Library_Instance_Get_I ( int * Instance);
|
||||||
SMT_Status SM_Library_Instance_Get_C ( int * Instance);
|
SMT_Status SM_Library_Instance_Get_C ( int * Instance);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Changement de contexte d'utilisation de la librairie */
|
/* Changement de contexte d'utilisation de la librairie */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Context : nom du nouveau contexte */
|
/* (I) Context : nom du nouveau contexte */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Context_Set_I ( const char * Context );
|
SMT_Status SM_Library_Context_Set_I ( const char * Context );
|
||||||
SMT_Status SM_Library_Context_Set_C ( const char * Context );
|
SMT_Status SM_Library_Context_Set_C ( const char * Context );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Récupération du nom du contexte utilisé */
|
/* Récupération du nom du contexte utilisé */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (O) Context : adresse du nom du contexte utilisé */
|
/* (O) Context : adresse du nom du contexte utilisé */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Context_Get_I ( char ** Context );
|
SMT_Status SM_Library_Context_Get_I ( char ** Context );
|
||||||
SMT_Status SM_Library_Context_Get_C ( char ** Context );
|
SMT_Status SM_Library_Context_Get_C ( char ** Context );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fermeture de l'instance de la librairie */
|
/* Fermeture de l'instance de la librairie */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Flags : mode de fermeture (destruction ou fermeture simple) */
|
/* (I) Flags : mode de fermeture (destruction ou fermeture simple) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Close_I ( SMT_Flags Flags );
|
SMT_Status SM_Library_Close_I ( SMT_Flags Flags );
|
||||||
SMT_Status SM_Library_Close_C ( SMT_Flags Flags );
|
SMT_Status SM_Library_Close_C ( SMT_Flags Flags );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Affichage des informations de la base de mémoires partagées */
|
/* Affichage des informations de la base de mémoires partagées */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Out : pointeur sur le flux de sortie */
|
/* (I) Out : pointeur sur le flux de sortie */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Dump_I ( FILE * Out );
|
SMT_Status SM_Library_Dump_I ( FILE * Out );
|
||||||
SMT_Status SM_Library_Dump_C ( FILE * Out );
|
SMT_Status SM_Library_Dump_C ( FILE * Out );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Libération de tous les verrous (base, heap) */
|
/* Libération de tous les verrous (base, heap) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Unlock_I ( void );
|
SMT_Status SM_Library_Unlock_I ( void );
|
||||||
SMT_Status SM_Library_Unlock_C ( void );
|
SMT_Status SM_Library_Unlock_C ( void );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Définition de la sortie standard des messages d'erreur de la librairie */
|
/* Définition de la sortie standard des messages d'erreur de la librairie */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Library_Stderr_Set_I ( FILE * Out );
|
SMT_Status SM_Library_Stderr_Set_I ( FILE * Out );
|
||||||
SMT_Status SM_Library_Stderr_Set_C ( FILE * Out );
|
SMT_Status SM_Library_Stderr_Set_C ( FILE * Out );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Test d'existence d'un heap */
|
/* Test d'existence d'un heap */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Heap_Name : nom du heap */
|
/* (I) Heap_Name : nom du heap */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Exist_I ( const char * Heap_Name );
|
SMT_Status SM_Heap_Exist_I ( const char * Heap_Name );
|
||||||
SMT_Status SM_Heap_Exist_C ( const char * Heap_Name );
|
SMT_Status SM_Heap_Exist_C ( const char * Heap_Name );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Ouverture/création d'un heap */
|
/* Ouverture/création d'un heap */
|
||||||
@@ -287,8 +319,8 @@ SMT_Status SM_Heap_Exist_C ( const char * Heap_Name );
|
|||||||
/* (I) Flags : mode d'ouverture du heap */
|
/* (I) Flags : mode d'ouverture du heap */
|
||||||
/* (O) Locked : verrou effectif (TRUE ou FALSE) */
|
/* (O) Locked : verrou effectif (TRUE ou FALSE) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Open_I ( const char * Heap_Name, SMT_Heap ** Heap, size_t Seg_Size, SMT_Flags Flags, int * Locked );
|
SMT_Status SM_Heap_Open_I ( const char * Heap_Name, SMT_Heap ** Heap, size_t Seg_Size, SMT_Flags Flags, int * Locked );
|
||||||
SMT_Status SM_Heap_Open_C ( const char * Heap_Name, SMT_Heap ** Heap, size_t Seg_Size, SMT_Flags Flags, int * Locked );
|
SMT_Status SM_Heap_Open_C ( const char * Heap_Name, SMT_Heap ** Heap, size_t Seg_Size, SMT_Flags Flags, int * Locked );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Teste si un heap a déjà été ouvert par le processus courant */
|
/* Teste si un heap a déjà été ouvert par le processus courant */
|
||||||
@@ -296,24 +328,24 @@ SMT_Status SM_Heap_Open_C ( const char * Heap_Name, SMT_Heap ** Heap, size_t Seg
|
|||||||
/* (I) Heap_Name : nom du heap */
|
/* (I) Heap_Name : nom du heap */
|
||||||
/* (O) Heap : adresse du pointeur sur le heap ouvert */
|
/* (O) Heap : adresse du pointeur sur le heap ouvert */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_IsOpen_I ( const char * Heap_Name, SMT_Heap ** Heap );
|
SMT_Status SM_Heap_IsOpen_I ( const char * Heap_Name, SMT_Heap ** Heap );
|
||||||
SMT_Status SM_Heap_IsOpen_C ( const char * Heap_Name, SMT_Heap ** Heap );
|
SMT_Status SM_Heap_IsOpen_C ( const char * Heap_Name, SMT_Heap ** Heap );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fermeture d'un heap */
|
/* Fermeture d'un heap */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Heap : pointeur sur un heap ouvert */
|
/* (I) Heap : pointeur sur un heap ouvert */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Close_I ( SMT_Heap * Heap );
|
SMT_Status SM_Heap_Close_I ( SMT_Heap * Heap );
|
||||||
SMT_Status SM_Heap_Close_C ( SMT_Heap * Heap );
|
SMT_Status SM_Heap_Close_C ( SMT_Heap * Heap );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Destruction d'un heap */
|
/* Destruction d'un heap */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Heap_Name : nom du heap */
|
/* (I) Heap_Name : nom du heap */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_End_I ( const char * Heap_Name );
|
SMT_Status SM_Heap_End_I ( const char * Heap_Name );
|
||||||
SMT_Status SM_Heap_End_C ( const char * Heap_Name );
|
SMT_Status SM_Heap_End_C ( const char * Heap_Name );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Compression d'un heap */
|
/* Compression d'un heap */
|
||||||
@@ -321,8 +353,8 @@ SMT_Status SM_Heap_End_C ( const char * Heap_Name );
|
|||||||
/* (I) Heap : pointeur sur un heap ouvert */
|
/* (I) Heap : pointeur sur un heap ouvert */
|
||||||
/* (O) Compress : pointeur sur la taille mémoire gagnée */
|
/* (O) Compress : pointeur sur la taille mémoire gagnée */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Compress_I ( SMT_Heap * Heap, size_t * Compress );
|
SMT_Status SM_Heap_Compress_I ( SMT_Heap * Heap, size_t * Compress );
|
||||||
SMT_Status SM_Heap_Compress_C ( SMT_Heap * Heap, size_t * Compress );
|
SMT_Status SM_Heap_Compress_C ( SMT_Heap * Heap, size_t * Compress );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Configuration d'un heap */
|
/* Configuration d'un heap */
|
||||||
@@ -330,8 +362,8 @@ SMT_Status SM_Heap_Compress_C ( SMT_Heap * Heap, size_t * Compress );
|
|||||||
/* (I) Heap : pointeur sur un heap ouvert */
|
/* (I) Heap : pointeur sur un heap ouvert */
|
||||||
/* (I) Tag : type de configuration */
|
/* (I) Tag : type de configuration */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Config_I ( SMT_Heap * Heap, SMT_Config Tag, ... );
|
SMT_Status SM_Heap_Config_I ( SMT_Heap * Heap, SMT_Config Tag, ... );
|
||||||
SMT_Status SM_Heap_Config_C ( SMT_Heap * Heap, SMT_Config Tag, ... );
|
SMT_Status SM_Heap_Config_C ( SMT_Heap * Heap, SMT_Config Tag, ... );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Vérification/correction des structures d'un heap : */
|
/* Vérification/correction des structures d'un heap : */
|
||||||
@@ -341,8 +373,8 @@ SMT_Status SM_Heap_Config_C ( SMT_Heap * Heap, SMT_Config Tag, ... );
|
|||||||
/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */
|
/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */
|
||||||
/* (I) Out : pointeur sur le flux de sortie du rapport */
|
/* (I) Out : pointeur sur le flux de sortie du rapport */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Check_I ( SMT_Heap * Heap, int * Nb_Detected, int * Nb_Corrected, FILE * Out);
|
SMT_Status SM_Heap_Check_I ( SMT_Heap * Heap, int * Nb_Detected, int * Nb_Corrected, FILE * Out);
|
||||||
SMT_Status SM_Heap_Check_C ( SMT_Heap * Heap, int * Nb_Detected, int * Nb_Corrected, FILE * Out);
|
SMT_Status SM_Heap_Check_C ( SMT_Heap * Heap, int * Nb_Detected, int * Nb_Corrected, FILE * Out);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Pose d'un verrou sur un heap */
|
/* Pose d'un verrou sur un heap */
|
||||||
@@ -351,16 +383,16 @@ SMT_Status SM_Heap_Check_C ( SMT_Heap * Heap, int * Nb_Detected, int * Nb_Correc
|
|||||||
/* (I) Flags : mode de verrouillage (SMD_READ ou SMD_WRITE) */
|
/* (I) Flags : mode de verrouillage (SMD_READ ou SMD_WRITE) */
|
||||||
/* (O) Locked : verrouillage effectué (TRUE ou FALSE) */
|
/* (O) Locked : verrouillage effectué (TRUE ou FALSE) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Lock_I ( SMT_Heap * Heap, SMT_Flags Flags, int * Locked );
|
SMT_Status SM_Heap_Lock_I ( SMT_Heap * Heap, SMT_Flags Flags, int * Locked );
|
||||||
SMT_Status SM_Heap_Lock_C ( SMT_Heap * Heap, SMT_Flags Flags, int * Locked );
|
SMT_Status SM_Heap_Lock_C ( SMT_Heap * Heap, SMT_Flags Flags, int * Locked );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Libération d'un verrou sur un heap */
|
/* Libération d'un verrou sur un heap */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Heap : pointeur sur un heap ouvert */
|
/* (I) Heap : pointeur sur un heap ouvert */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Heap_Unlock_I ( SMT_Heap * Heap );
|
SMT_Status SM_Heap_Unlock_I ( SMT_Heap * Heap );
|
||||||
SMT_Status SM_Heap_Unlock_C ( SMT_Heap * Heap );
|
SMT_Status SM_Heap_Unlock_C ( SMT_Heap * Heap );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Allocation d'un chunk dans un heap */
|
/* Allocation d'un chunk dans un heap */
|
||||||
@@ -369,8 +401,8 @@ SMT_Status SM_Heap_Unlock_C ( SMT_Heap * Heap );
|
|||||||
/* (I) Size : taille du chunk */
|
/* (I) Size : taille du chunk */
|
||||||
/* (O) Ptr : pointeur sur la zone de données allouée */
|
/* (O) Ptr : pointeur sur la zone de données allouée */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Chunk_Alloc_I ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr );
|
SMT_Status SM_Chunk_Alloc_I ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr );
|
||||||
SMT_Status SM_Chunk_Alloc_C ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr );
|
SMT_Status SM_Chunk_Alloc_C ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr );
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Désallocation d'un chunk */
|
/* Désallocation d'un chunk */
|
||||||
@@ -378,8 +410,8 @@ SMT_Status SM_Chunk_Alloc_C ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr );
|
|||||||
/* (I) Heap : pointeur sur un heap ouvert */
|
/* (I) Heap : pointeur sur un heap ouvert */
|
||||||
/* (I) Ptr : adresse de la zone de données du chunk à désallouer */
|
/* (I) Ptr : adresse de la zone de données du chunk à désallouer */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Chunk_Free_I ( SMT_Heap * Heap, void * Ptr );
|
SMT_Status SM_Chunk_Free_I ( SMT_Heap * Heap, void * Ptr );
|
||||||
SMT_Status SM_Chunk_Free_C ( SMT_Heap * Heap, void * Ptr );
|
SMT_Status SM_Chunk_Free_C ( SMT_Heap * Heap, void * Ptr );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
22
lib/Makefile
Normal file
22
lib/Makefile
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
SRC := libshmem.c
|
||||||
|
TARGETS := libshmem.a libshmem.so
|
||||||
|
FILE_LIB := libshmem.a libshmem.so
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include ../Makefile.var
|
||||||
|
include ../Makefile.rule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DEP += libshmem.h ../include/shmem.h ../../libnode/include/node.h Makefile
|
||||||
|
INCLUDE += -I . -I ../include -I ../../libnode/include
|
||||||
|
|
||||||
|
ifdef _LIBVER_SUPPORT
|
||||||
|
DEP += ../../libver/ver.h
|
||||||
|
INCLUDE += -I ../../libver/lib
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
libshmem.o : libshmem.c $(DEP)
|
||||||
3842
lib/libshmem.c
3842
lib/libshmem.c
File diff suppressed because it is too large
Load Diff
112
lib/libshmem.h
112
lib/libshmem.h
@@ -1,19 +1,59 @@
|
|||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $RCSfile: libshmem.h,v $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* $Revision: 2.3 $ */
|
||||||
|
/* $Name: $ */
|
||||||
|
/* $Date: 2005/06/26 23:02:35 $ */
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* This file is part of LibShMem */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU Lesser General Public Licence as published by */
|
||||||
|
/* the Free Software Foundation; either version 2.1 of the License, or */
|
||||||
|
/* (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* LibShMem is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU Lesser General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU Lesser General Public License */
|
||||||
|
/* along with LibShMem; if not, write to the Free Software */
|
||||||
|
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdarg.h>
|
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#include <sys/ipc.h>
|
#include <sys/ipc.h>
|
||||||
#include <ver.h>
|
|
||||||
#include <shmem.h>
|
#include <shmem.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Compteur d'ouverture de la librairie */
|
/* Compteur d'ouverture de la librairie */
|
||||||
|
|
||||||
unsigned int SM_Open_Counter = 0;
|
unsigned int SM_Open_Counter = 0;
|
||||||
|
|
||||||
|
|
||||||
/* Flux de sortie des messages d'erreur générés par la librairie */
|
/* Flux de sortie des messages d'erreur générés par la librairie */
|
||||||
|
|
||||||
FILE * SM_stderr;
|
FILE * SM_stderr;
|
||||||
@@ -22,10 +62,16 @@ extern char * strdup (const char *);
|
|||||||
|
|
||||||
#define max(A,B) ((A < B) ? B : A)
|
#define max(A,B) ((A < B) ? B : A)
|
||||||
|
|
||||||
|
|
||||||
/* Limite supérieure d'adressage */
|
/* Limite supérieure d'adressage */
|
||||||
|
|
||||||
#define MEM_LIMIT 1000000000
|
#define MEM_LIMIT 1000000000
|
||||||
|
|
||||||
|
|
||||||
|
//#define SMD_CMD_VALUE_SUM (NDT_Command)65
|
||||||
|
#define NDD_CMD_VALUE_SUM (NDT_Command)NDD_CMD_USER_TRAVERSE
|
||||||
|
|
||||||
|
|
||||||
/* Taille d'un segment = 100 Ko par défaut */
|
/* Taille d'un segment = 100 Ko par défaut */
|
||||||
|
|
||||||
#define K 1024
|
#define K 1024
|
||||||
@@ -34,10 +80,11 @@ extern char * strdup (const char *);
|
|||||||
|
|
||||||
char Info_Msg [256];
|
char Info_Msg [256];
|
||||||
|
|
||||||
|
|
||||||
/* Etats possibles pour un heap */
|
/* Etats possibles pour un heap */
|
||||||
|
|
||||||
#define SMD_STATE_VALID 0
|
#define SMD_STATE_VALID 0
|
||||||
#define SMD_STATE_UNVALIDATED 1
|
#define SMD_STATE_UNVALIDATED 1
|
||||||
#define SMD_STATE_CORRUPTED 2
|
#define SMD_STATE_CORRUPTED 2
|
||||||
|
|
||||||
/* Référence sur le heap système */
|
/* Référence sur le heap système */
|
||||||
@@ -49,17 +96,17 @@ SMT_Heap * System_Heap;
|
|||||||
NDT_Root * Opened_Heap_List;
|
NDT_Root * Opened_Heap_List;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Taille par défaut des chunks alloués dans le heap système :
|
Taille par défaut des chunks alloués dans le heap système :
|
||||||
Cette taille est fixée à la taille maximale des chunks pouvant
|
Cette taille est fixée à la taille maximale des chunks pouvant
|
||||||
y être alloué (de type NDT_Node, NDT_Root, SMT_MHH ou SMT_DSH)
|
y être alloué (de type NDT_Node, NDT_Root, SMT_MHH ou SMT_DSH)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DEFAULT_CHUNK_SIZE max(max(sizeof(NDT_Root), sizeof(NDT_Node)), max(sizeof(SMT_MHH), sizeof(SMT_DSH)))
|
#define DEFAULT_CHUNK_SIZE max(max(sizeof(NDT_Root), sizeof(NDT_Node)), max(sizeof(SMT_MHH), sizeof(SMT_DSH)))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Nombre de chunk libre minimum avant extension du heap système par un
|
Nombre de chunk libre minimum avant extension du heap système par un
|
||||||
nouveau segment de données (fixé à 3 car l'ajout d'un nouveau segment
|
nouveau segment de données (fixé à 3 car l'ajout d'un nouveau segment
|
||||||
nécessite l'allocation de 2 chunks (un noeud et une entête de segment).
|
nécessite l'allocation de 2 chunks (un noeud et une entête de segment).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define FREE_CHUNK_LIMIT 3
|
#define FREE_CHUNK_LIMIT 3
|
||||||
@@ -76,8 +123,8 @@ char * SM_Context;
|
|||||||
#define CONTEXT_ENV_VAR "CONTEXT"
|
#define CONTEXT_ENV_VAR "CONTEXT"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Variable globale permettant d'indiquer que l'on est en train
|
Variable globale permettant d'indiquer que l'on est en train
|
||||||
d'étendre le heap système par ajout d'un nouveau segment.
|
d'étendre le heap système par ajout d'un nouveau segment.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned int Adding_Segment = FALSE;
|
unsigned int Adding_Segment = FALSE;
|
||||||
@@ -86,8 +133,8 @@ SMT_Chunk * Tmp_Chunk;
|
|||||||
SMT_MHH * Tmp_MHH;
|
SMT_MHH * Tmp_MHH;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Définition des opérations de verouillage et de déverrouillage
|
Définition des opérations de verouillage et de déverrouillage
|
||||||
NB : la valeur 1 d'un sémaphore correspond à l'état non verrouillé
|
NB : la valeur 1 d'un sémaphore correspond à l'état non verrouillé
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Pose d'un verrou en lecture : 2 opérations : ( -1 puis +2 ) */
|
/* Pose d'un verrou en lecture : 2 opérations : ( -1 puis +2 ) */
|
||||||
@@ -112,30 +159,30 @@ struct sembuf SM_SemOp_TSL [2] = { {0, 0, SEM_UNDO|IPC_NOWAIT}, {0, 2, SEM_UNDO
|
|||||||
|
|
||||||
typedef union semun
|
typedef union semun
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
struct semid_ds * buf;
|
struct semid_ds * buf;
|
||||||
unsigned short int * array;
|
unsigned short int * array;
|
||||||
} semun;
|
} semun;
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Allocation de mémoire dans la base */
|
/* Allocation de mémoire dans la base */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Base_Alloc (size_t, void **, void *);
|
NDT_Status SM_Base_Alloc( void **, size_t, void *);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Désallocation de mémoire dans la base */
|
/* Désallocation de mémoire dans la base */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_Base_Free (void *, void *);
|
NDT_Status SM_Base_Free( void *, void *);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Allocation de mémoire dans le heap système */
|
/* Allocation de mémoire dans le heap système */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_System_Alloc (size_t, void **, void *);
|
NDT_Status SM_System_Alloc( void **, size_t, void *);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Désallocation de mémoire dans le heap système */
|
/* Désallocation de mémoire dans le heap système */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
SMT_Status SM_System_Free (void *, void *);
|
NDT_Status SM_System_Free( void *, void *);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Initialisation de la base */
|
/* Initialisation de la base */
|
||||||
@@ -170,12 +217,12 @@ SMT_Status SM_Base_Unlock (SMT_Flags);
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fonction manager de la liste des heaps ouverts */
|
/* Fonction manager de la liste des heaps ouverts */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status SM_Opened_Heap_List_Manager (va_list);
|
NDT_Status SM_Opened_Heap_List_Manager ( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fonction manager du MHR (Memory Heap Root) */
|
/* Fonction manager du MHR (Memory Heap Root) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status MHR_Manager (va_list);
|
NDT_Status MHR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Destruction d'un MHH (Memory Heap Header) */
|
/* Destruction d'un MHH (Memory Heap Header) */
|
||||||
@@ -185,17 +232,7 @@ SMT_Status SM_MHH_End (SMT_MHH *);
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fonction manager pour un DSR (Data Segment Root) */
|
/* Fonction manager pour un DSR (Data Segment Root) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status SM_DSR_Manager (va_list);
|
NDT_Status SM_DSR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
/* Initialisation d'un nouveau segment de données (noeud du DSR) */
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
SMT_DSH *SM_DataSegment_Init (SMT_MHH *, size_t);
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
/* Terminaison d'un segment de données */
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
SMT_Status SM_DataSegment_End (NDT_Root *, SMT_DSH *);
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Ouverture d'un segment de données */
|
/* Ouverture d'un segment de données */
|
||||||
@@ -215,12 +252,12 @@ size_t SM_DataSegment_Compress (SMT_DSH *, NDT_Root *);
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fonction manager pour un ACR (Allocated Chunk Root) */
|
/* Fonction manager pour un ACR (Allocated Chunk Root) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status SM_ACR_Manager (va_list);
|
NDT_Status SM_ACR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Fonction manager pour un FCR (Free Chunk Root) */
|
/* Fonction manager pour un FCR (Free Chunk Root) */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status SM_FCR_Manager(va_list);
|
NDT_Status SM_FCR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Pose d'un verrou sur un heap : */
|
/* Pose d'un verrou sur un heap : */
|
||||||
@@ -247,11 +284,6 @@ SMT_Status SM_Semaphore_Operate (int, struct sembuf *, unsigned int);
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
char * SM_Lock_Status_Get (const char *, void *);
|
char * SM_Lock_Status_Get (const char *, void *);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
/* Récupère sous forme explicite la description d'une racine de structure */
|
|
||||||
/*------------------------------------------------------------------------------*/
|
|
||||||
char * SM_Root_Description_Get (const char *, NDT_Root *);
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Routine d'affichage d'un message d'erreur */
|
/* Routine d'affichage d'un message d'erreur */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
|
|||||||
62
libshmem.spec
Normal file
62
libshmem.spec
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
Name: libshmem
|
||||||
|
Version: 2.0.0
|
||||||
|
|
||||||
|
%define release_nb 1
|
||||||
|
|
||||||
|
Release: %{release_nb}rx3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%define libnode_name %{name}-%{version}-%{release_nb}
|
||||||
|
%define source %{libnode_name}.src.tgz
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Summary: A shared memory pool manager C library
|
||||||
|
Copyright: GPL/LGPL
|
||||||
|
Group: Application/Utilitaires
|
||||||
|
Distribution: Rx3 OpenSource
|
||||||
|
Vendor: Rx3
|
||||||
|
Packager: Arnaud G. Gibert <arnaud@rx3.net>
|
||||||
|
|
||||||
|
Source: ftp://ftp.rx3.org/pub/%{source}
|
||||||
|
Url: http://www.rx3.org/dvp/libshmem/download/
|
||||||
|
BuildRoot: %{_tmppath}/%{libnode_name}-buildroot
|
||||||
|
AutoReqProv: no
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
Manages a memory pool in share memory
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
/usr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%build
|
||||||
|
rm -rf %{libnode_name}
|
||||||
|
tar -xzvvf /usr/src/RPM/SOURCES/%{source}
|
||||||
|
cd %{libnode_name}
|
||||||
|
make clean
|
||||||
|
make all
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
cd %{libnode_name}
|
||||||
|
make install ROOT=$RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf %{libnode_name}
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue Jan 25 2005 Arnaud G. Gibert <arnaud@rx3.net> 2.0.0-1rx3
|
||||||
|
- Initial release of this spec file.
|
||||||
52
util/Makefile
Normal file
52
util/Makefile
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
SRC := smadmin.c
|
||||||
|
TARGETS := smadmin smadmin-c smadmin-static smadmin-static-c
|
||||||
|
FILE_BIN := smadmin smadmin-c smadmin-static smadmin-static-c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
include ../Makefile.var
|
||||||
|
include ../Makefile.rule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DEP_STATIC += ../lib/libshmem.a ../../libnode/lib/libnode.a
|
||||||
|
DEP_DYNAMIC += ../lib/libshmem.so ../../libnode/lib/libnode.so
|
||||||
|
INCLUDE += -I . -I ../include -I ../../libnode/include
|
||||||
|
LIBDIR += -L . -L ../lib -L ../../libnode/lib
|
||||||
|
LIB_STATIC += ../lib/libshmem.a ../../libnode/lib/libnode.a -ldl
|
||||||
|
LIB_DYNAMIC += -lshmem -lnode -ldl
|
||||||
|
CFLAGS += -rdynamic
|
||||||
|
|
||||||
|
ifdef _LIBVER_SUPPORT
|
||||||
|
DEP_STATIC += ../../libver/ver.h ../../libver/libver.a
|
||||||
|
DEP_DYNAMIC += ../../libver/ver.h ../../libver/libver.so
|
||||||
|
INCLUDE += -I ../../libver/lib
|
||||||
|
LIBDIR += -L ../../libver/lib
|
||||||
|
|
||||||
|
ifeq ($(OSTYPE),linux-gnu)
|
||||||
|
LIB_STATIC += ../../libver/lib/libver.a
|
||||||
|
LIB_DYNAMIC += -lver
|
||||||
|
else
|
||||||
|
LIB_STATIC += ../../libver/lib/libver.a
|
||||||
|
LIB_DYNAMIC += -lver
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -D_LIBVER_SUPPORT
|
||||||
|
endif
|
||||||
|
|
||||||
|
ND_CHECK_FLAGS = -DSM_MODE=0
|
||||||
|
ND_NOCHECK_FLAGS = -DSM_MODE=1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
smadmin: smadmin.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smadmin-c: smadmin.c $(DEP_DYNAMIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $(LIBDIR) $(LIB_DYNAMIC) $<
|
||||||
|
|
||||||
|
smadmin-static: smadmin.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_NOCHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
|
|
||||||
|
smadmin-static-c: smadmin.c $(DEP_STATIC)
|
||||||
|
$(CC) -o $@ $(CFLAGS) $(ND_CHECK_FLAGS) $(INCLUDE) $< $(LIB_STATIC)
|
||||||
123
util/smadmin.c
123
util/smadmin.c
@@ -3,10 +3,14 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <node.h>
|
#include <node.h>
|
||||||
#define SM_MODE 0 /* Utilisation des API sécurisés */
|
|
||||||
|
#ifndef SM_MODE
|
||||||
|
# define SM_MODE 0 /* Utilisation des API sécurisés */
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <shmem.h>
|
#include <shmem.h>
|
||||||
|
|
||||||
VER_INFO_EXPORT (smadmin, "$Revision: 1.1 $", "$Name: $", __FILE__, "$Author: smas $")
|
//VER_INFO_EXPORT (smadmin, "$Revision: 2.3 $", "$Name: $", __FILE__, "$Author: agibert $")
|
||||||
|
|
||||||
#define USAGE "Usage : %s [ --help | --version [-v] | --create | --destroy ]\n"
|
#define USAGE "Usage : %s [ --help | --version [-v] | --create | --destroy ]\n"
|
||||||
|
|
||||||
@@ -30,8 +34,15 @@ VER_INFO_EXPORT (smadmin, "$Revision: 1.1 $", "$Name: $", __FILE__, "$Author: s
|
|||||||
#define ACR_DUMP 17
|
#define ACR_DUMP 17
|
||||||
#define FCR_DUMP 18
|
#define FCR_DUMP 18
|
||||||
|
|
||||||
|
#define NAME_LEN 100
|
||||||
|
#define NAME_SIZE ( NAME_LEN + 1)
|
||||||
|
|
||||||
|
#define TMP_LEN 100
|
||||||
|
#define TMP_SIZE ( TMP_LEN + 1)
|
||||||
|
|
||||||
char menu [1000];
|
char menu [1000];
|
||||||
char tmp [100];
|
|
||||||
|
char tmp [TMP_SIZE];
|
||||||
|
|
||||||
void init_menu (void);
|
void init_menu (void);
|
||||||
int print_menu (void);
|
int print_menu (void);
|
||||||
@@ -39,7 +50,7 @@ int print_menu (void);
|
|||||||
int main (int argc, char ** argv)
|
int main (int argc, char ** argv)
|
||||||
{
|
{
|
||||||
int choice;
|
int choice;
|
||||||
char name [100];
|
char name [NAME_SIZE];
|
||||||
int Mode, Locked;
|
int Mode, Locked;
|
||||||
void * ptr;
|
void * ptr;
|
||||||
char answer [10];
|
char answer [10];
|
||||||
@@ -56,13 +67,13 @@ int main (int argc, char ** argv)
|
|||||||
fprintf (stderr, USAGE, argv[0]);
|
fprintf (stderr, USAGE, argv[0]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (!strcmp (argv[1], "--version"))
|
/* else if (!strcmp (argv[1], "--version"))
|
||||||
{
|
{
|
||||||
if (argc >= 3 && !strcmp (argv[2], "-v"))
|
if (argc >= 3 && !strcmp (argv[2], "-v"))
|
||||||
return VER_Object_Print (stdout, VERD_VERBOSE);
|
return VER_Object_Print (stdout, VERD_VERBOSE);
|
||||||
else
|
else
|
||||||
return VER_Object_Print (stdout, VERD_MINIMAL);
|
return VER_Object_Print (stdout, VERD_MINIMAL);
|
||||||
}
|
} */
|
||||||
else if (!strcmp (argv[1], "--create"))
|
else if (!strcmp (argv[1], "--create"))
|
||||||
{
|
{
|
||||||
if (SM_Library_Open (0, NULL, SMD_CREATE | SMD_DEBUG_ALL) != SMS_OK)
|
if (SM_Library_Open (0, NULL, SMD_CREATE | SMD_DEBUG_ALL) != SMS_OK)
|
||||||
@@ -127,10 +138,14 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case MHH_INIT:
|
case MHH_INIT:
|
||||||
fprintf (stdout, "\nNew heap name ? ");
|
fprintf (stdout, "\nNew heap name ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
fprintf (stdout, "\nHeap segment size ? ");
|
fprintf (stdout, "\nHeap segment size ? ");
|
||||||
gets (tmp);
|
fgets( tmp, NAME_SIZE, stdin);
|
||||||
size = atoi (tmp);
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
|
size = atol (tmp);
|
||||||
fprintf (stdout, "\nReturn code = %s\n", \
|
fprintf (stdout, "\nReturn code = %s\n", \
|
||||||
SM_Heap_Open (name, &Heap, size, \
|
SM_Heap_Open (name, &Heap, size, \
|
||||||
SMD_CREATE, &Locked) == SMS_OK ? "OK" : "NOK" );
|
SMD_CREATE, &Locked) == SMS_OK ? "OK" : "NOK" );
|
||||||
@@ -138,9 +153,13 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case MHH_OPEN:
|
case MHH_OPEN:
|
||||||
fprintf (stdout, "\nHeap name to open ? ");
|
fprintf (stdout, "\nHeap name to open ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
fprintf (stdout, "\nOpening mode (read=1 write=2) ? ");
|
fprintf (stdout, "\nOpening mode (read=1 write=2) ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
if (tmp[0] == '1') Mode = SMD_READ;
|
if (tmp[0] == '1') Mode = SMD_READ;
|
||||||
else Mode = SMD_WRITE;
|
else Mode = SMD_WRITE;
|
||||||
if (!strcmp (name, HEAP_SYSTEM))
|
if (!strcmp (name, HEAP_SYSTEM))
|
||||||
@@ -157,7 +176,9 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case MHH_COMPRESS:
|
case MHH_COMPRESS:
|
||||||
fprintf (stdout, "\nHeap name à compresser ? ");
|
fprintf (stdout, "\nHeap name à compresser ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
size_t Compress;
|
size_t Compress;
|
||||||
@@ -169,7 +190,9 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case MHH_END:
|
case MHH_END:
|
||||||
fprintf (stdout, "\nHeap name to remove ? ");
|
fprintf (stdout, "\nHeap name to remove ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (!strcmp (name, HEAP_SYSTEM))
|
if (!strcmp (name, HEAP_SYSTEM))
|
||||||
{
|
{
|
||||||
fprintf (stdout, \
|
fprintf (stdout, \
|
||||||
@@ -184,7 +207,9 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case MHH_CLOSE:
|
case MHH_CLOSE:
|
||||||
fprintf (stdout, "\nHeap name to close ? ");
|
fprintf (stdout, "\nHeap name to close ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (!strcmp (name, HEAP_SYSTEM))
|
if (!strcmp (name, HEAP_SYSTEM))
|
||||||
{
|
{
|
||||||
fprintf (stdout, \
|
fprintf (stdout, \
|
||||||
@@ -201,7 +226,9 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case MHH_CHECK:
|
case MHH_CHECK:
|
||||||
fprintf (stdout, "\nHeap name to check/recover ? ");
|
fprintf (stdout, "\nHeap name to check/recover ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
Nb_Detected = Nb_Corrected = 0;
|
Nb_Detected = Nb_Corrected = 0;
|
||||||
@@ -212,41 +239,55 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case ALLOC_CHUNK:
|
case ALLOC_CHUNK:
|
||||||
fprintf (stdout, "\nHeap name ? ");
|
fprintf (stdout, "\nHeap name ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
fprintf (stdout, "\nAllocation size ? ");
|
fprintf (stdout, "\nAllocation size ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
size = atoi (tmp);
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
|
size = atol (tmp);
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
SM_Chunk_Alloc (Heap, size, &ptr);
|
SM_Chunk_Alloc (Heap, size, &ptr);
|
||||||
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
||||||
}
|
}
|
||||||
fprintf (stdout, "\nAddress = 0x%p (%d)\n", ptr, (unsigned int)ptr);
|
fprintf (stdout, "\nAddress = 0x%p (%lu)\n", ptr, ptr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WRITE_CHUNK:
|
case WRITE_CHUNK:
|
||||||
fprintf (stdout, "\nAddress ? ");
|
fprintf (stdout, "\nAddress ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
ptr = (void *)atoi (tmp);
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
|
ptr = (void *)atol (tmp);
|
||||||
fprintf (stdout, "\nString to put in ? ");
|
fprintf (stdout, "\nString to put in ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
strcpy ( (char *)ptr, tmp);
|
strcpy ( (char *)ptr, tmp);
|
||||||
fprintf (stdout, "\nOK\n");
|
fprintf (stdout, "\nOK\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_CHUNK:
|
case READ_CHUNK:
|
||||||
fprintf (stdout, "\nAddress ? ");
|
fprintf (stdout, "\nAddress ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
ptr = (void *)atoi (tmp);
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
|
ptr = (void *)atol (tmp);
|
||||||
fprintf (stdout, "\nValeur du pointeur = %s\n", (char *)ptr);
|
fprintf (stdout, "\nValeur du pointeur = %s\n", (char *)ptr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FREE_CHUNK:
|
case FREE_CHUNK:
|
||||||
fprintf (stdout, "\nHeap name ? ");
|
fprintf (stdout, "\nHeap name ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
fprintf (stdout, "\nAddress ? ");
|
fprintf (stdout, "\nAddress ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
ptr = (void *)atoi (tmp);
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
|
ptr = (void *)atol (tmp);
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_WRITE, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
fprintf (stdout, "\nReturn code = %s\n", \
|
fprintf (stdout, "\nReturn code = %s\n", \
|
||||||
@@ -258,33 +299,39 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
case DSR_DUMP:
|
case DSR_DUMP:
|
||||||
fprintf (stdout, "\nHeap name ? ");
|
fprintf (stdout, "\nHeap name ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_READ, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_READ, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
ND_DataStruct_Info_Print (Heap->MHH->DSR, stdout);
|
ND_DataStruct_Info_Print( stdout, Heap->MHH->DSR, NDD_RECURSIVE_MODE_PARENT_CHILD, 0, 0);
|
||||||
ND_DataStruct_Print (Heap->MHH->DSR, stdout);
|
ND_DataStruct_Value_Print( stdout, Heap->MHH->DSR, NDD_RECURSIVE_MODE_PARENT_CHILD, 0, 0);
|
||||||
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACR_DUMP:
|
case ACR_DUMP:
|
||||||
fprintf (stdout, "\nHeap name ? ");
|
fprintf (stdout, "\nHeap name ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_READ, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_READ, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
ND_DataStruct_Info_Print (Heap->MHH->ACR, stdout);
|
ND_DataStruct_Info_Print( stdout, Heap->MHH->ACR, NDD_RECURSIVE_MODE_PARENT_CHILD, 0, 0);
|
||||||
ND_DataStruct_Print (Heap->MHH->ACR, stdout);
|
ND_DataStruct_Value_Print( stdout, Heap->MHH->ACR, NDD_RECURSIVE_MODE_PARENT_CHILD, 0, 0);
|
||||||
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FCR_DUMP:
|
case FCR_DUMP:
|
||||||
fprintf (stdout, "\nHeap name ? ");
|
fprintf (stdout, "\nHeap name ? ");
|
||||||
gets (name);
|
fgets( name, NAME_SIZE, stdin);
|
||||||
|
name[ strlen( name) - 1] = '\0';
|
||||||
|
|
||||||
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_READ, &Locked) == SMS_OK)
|
if (SM_Heap_Open (name, &Heap, 0, SMD_OPEN | SMD_READ, &Locked) == SMS_OK)
|
||||||
{
|
{
|
||||||
ND_DataStruct_Info_Print (Heap->MHH->FCR, stdout);
|
ND_DataStruct_Info_Print( stdout, Heap->MHH->FCR, NDD_RECURSIVE_MODE_PARENT_CHILD, 0, 0);
|
||||||
ND_DataStruct_Print (Heap->MHH->FCR, stdout);
|
ND_DataStruct_Value_Print( stdout, Heap->MHH->FCR, NDD_RECURSIVE_MODE_PARENT_CHILD, 0, 0);
|
||||||
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
if (Locked == TRUE) SM_Heap_Unlock (Heap);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -333,7 +380,9 @@ int print_menu (void)
|
|||||||
while (tmp[0] == '\0')
|
while (tmp[0] == '\0')
|
||||||
{
|
{
|
||||||
printf ("\nChoice ? ");
|
printf ("\nChoice ? ");
|
||||||
gets (tmp);
|
fgets( tmp, TMP_SIZE, stdin);
|
||||||
|
tmp[ strlen( tmp) - 1] = '\0';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return atoi (tmp);
|
return atoi (tmp);
|
||||||
|
|||||||
Reference in New Issue
Block a user