Skip to content

mwweissmann/ocaml-posix-mqueue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

POSIX message queues for OCaml

The ocaml-mqueue library provides POSIX message queue bindings for OCaml.

This library has been tested on Linux, but QNX, Solaris etc. should work, too. Mac OS X on the other hand does currently NOT provide POSIX message queues (as of OS X 10.10).

The API of ocaml-mqueue is online at the OCaml Forge.

Here is an example program that opens a queue, sends a message and then receives it's own message again:

open Rresult
open Mqueue

let name = "/myqueue"

let _ =
  let rc =
    (* open the queue, creating it if it does not exist *)
    (mq_open name [O_RDWR; O_CREAT] 0o644 {mq_flags=0; mq_maxmsg=5; mq_msgsize=32; mq_curmsgs=0}) >>=

    (* if the queue is opened successfully... *)
    (fun mq ->
      (* .. send a message .. *)
      (mq_send mq {payload="hello ocaml-mqueue!"; priority=23}) >>=

      (* .. and receive a message .. *)
      (fun () -> mq_receive mq 32) >>|
      
      (* .. and print the message *)
      (fun msg -> print_endline msg.payload)
    )
  in

  (* remove the queue from the system  *)
  let _ = mq_unlink name in

  (* handle the result *)
  match rc with
  | Rresult.Ok () -> print_endline "done"
  | Rresult.Error (`EUnix errno) -> print_endline (Unix.error_message errno)

The source code of mqueue is available under the MIT license.

This library is originally written by Markus Weissmann