Re: Information on use of Netsys.shm_open

Johan Mazel <[email protected]> Wed, 24 Mar 2010 01:32:32 +0100
Newsgroups gmane.comp.lang.ocaml.lib.net.devel
Message-ID <[email protected]>
2010/3/23 Gerd Stolpmann <[email protected]>

> On Di, 2010-03-23 at 19:15 +0100, Johan Mazel wrote:
> > Hi
> > I'm trying this little piece of code to open a shared memory and
> > modify it.
> > The code looks like this :
> >
> > open Unix
> > open Bigarray.Array1
> >
> > let _ =
> >
> >     Printf.printf("Test shared memory\n");
> >
> >     if (Netsys.have_posix_shm () = false) then
> >
> >         Printf.printf "No POSIX SHM\n"
> >     else
> >         (
> >
> >             Printf.printf "POSIX SHM OK\n";
> >
> >             let shm_name = "/shm_test" in
> >
> >             let right_list = ref [] in
> >
> >             right_list := Netsys.SHM_O_CREAT :: !right_list;
> >             right_list := Netsys.SHM_O_RDWR :: !right_list;
> >
> >             ignore(
> >                     try
> >                         (
> >                             Printf.printf "Netsys.shm_open call\n";
> >
> >                             let sd = Netsys.shm_open shm_name !
> > right_list 1 in
> >
> >                             Printf.printf "Netsys.shm_open ok\n";
> >
> >                             let my_big_array =
> > Bigarray.Array1.map_file sd Bigarray.char Bigarray.c_layout true 100
> > in
> >
> >                             let big_array_size = Bigarray.Array1.dim
> > my_big_array in
> >
> >                             Printf.printf "Size of BigArray: %d\n"
> > big_array_size;
> >
> >                             Bigarray.Array1.set my_big_array 0 'a';
> >                         )
> >                     with
> >                     | Unix_error (_ , invoked_function ,
> > shm_name_failure) ->
> >                             (
> >                                 Printf.printf
> >                                     "Opening failed through using
> > function %s on SHM %s\n"
> >                                     invoked_function
> >                                     shm_name_failure
> >                                 ;
> >                             )
> >                 );
> >
> >             Printf.printf "Shared memory tested\n";
> >         )
> >
> > I can create the shared memory file descriptor, but only once.
> > When I try to access it again (y rzlaunching my program, there is an
> > error on shm_open.
> >
> > I have to guess about a cause to this problem: first, I did not set
> > the right in the right manner and second, I do not use unlink.
> > The doc about the permissions is very light in this page
> > (
> http://projects.camlcity.org/projects/dl/ocamlnet-2.2.9/doc/html-main/Netsys.html).
> I tried with with 0, 1, 777 and none of these are working.
> > For the unlink function, my understanding is that it destroys the
> > file. But maybe, it has the same behviour as "close" in C for a file
> > descriptor.
>
> Well, shm_open just calls the C function with the same name, so for any
> detailed documentation see there.
>

Which function does unlink call ? Because there is no unlink function in the
posix C shared memory API.


> Your guess is right, the error in your code is the bad permissions
> bitfield. 0o666 instead of 1 should be just ok to give everybody
> read/write access. The bitfield is interpreted as for any other file.
>

Is there any doc available to know how to choose this code ?

Thanks for your time.

Johan


>
> Note that the shared memory file may even pop up in the real file
> hierarchy (depending on your OS). E.g. for Linux it
> is /dev/shm/shm_test. Another popular location is somewhere in /tmp.
>
> Gerd
>
> >
> > Thanks in advance for your time.
> >
> > Johan Mazel
> >
> ------------------------------------------------------------------------------
> > Download Intel&#174; Parallel Studio Eval
> > Try the new software tools for yourself. Speed compiling, find bugs
> > proactively, and fine-tune applications for parallel performance.
> > See why Intel Parallel Studio got high marks during beta.
> > http://p.sf.net/sfu/intel-sw-dev
> > _______________________________________________ Ocamlnet-devel mailing
> list [email protected]
> https://lists.sourceforge.net/lists/listinfo/ocamlnet-devel
>
>
> --
> ------------------------------------------------------------
> Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany
> [email protected]          http://www.gerd-stolpmann.de
> Phone: +49-6151-153855                  Fax: +49-6151-997714
> ------------------------------------------------------------
>
>

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev

_______________________________________________
Ocamlnet-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ocamlnet-devel