sig
  type t
  type flag = O_RDONLY | O_WRONLY | O_RDWR | O_NONBLOCK | O_CREAT | O_EXCL
  type mq_attr = {
    mq_flags : int;
    mq_maxmsg : int;
    mq_msgsize : int;
    mq_curmsgs : int;
  }
  type message = { payload : Bytes.t; priority : int; }
  type timespec = { tv_sec : int; tv_nsec : int; }
  val mq_open :
    string ->
    Mqueue.flag list ->
    Unix.file_perm ->
    Mqueue.mq_attr -> (Mqueue.t, [> `EUnix of Unix.error ]) Rresult.result
  val mq_send :
    Mqueue.t ->
    Mqueue.message -> (unit, [> `EUnix of Unix.error ]) Rresult.result
  val mq_timedsend :
    Mqueue.t ->
    Mqueue.message ->
    Mqueue.timespec -> (unit, [> `EUnix of Unix.error ]) Rresult.result
  val mq_receive :
    Mqueue.t ->
    int -> (Mqueue.message, [> `EUnix of Unix.error ]) Rresult.result
  val mq_timedreceive :
    Mqueue.t ->
    int ->
    Mqueue.timespec ->
    (Mqueue.message, [> `EUnix of Unix.error ]) Rresult.result
  val mq_close : Mqueue.t -> (unit, [> `EUnix of Unix.error ]) Rresult.result
  val mq_unlink : string -> (unit, [> `EUnix of Unix.error ]) Rresult.result
  val mq_setattr :
    Mqueue.t ->
    Mqueue.mq_attr ->
    (Mqueue.mq_attr, [> `EUnix of Unix.error ]) Rresult.result
  val mq_getattr :
    Mqueue.t -> (Mqueue.mq_attr, [> `EUnix of Unix.error ]) Rresult.result
  val mq_prio_max : int
  val mq_name_max : int
  val fd_of : Mqueue.t -> Unix.file_descr
end