msg.h revision 108048
150477Speter/* $FreeBSD: head/sys/sys/msg.h 108048 2002-12-18 18:22:06Z mike $ */ 22729Sdfr/* $NetBSD: msg.h,v 1.4 1994/06/29 06:44:43 cgd Exp $ */ 32729Sdfr 42729Sdfr/* 52729Sdfr * SVID compatible msg.h file 62729Sdfr * 72729Sdfr * Author: Daniel Boulet 82729Sdfr * 92729Sdfr * Copyright 1993 Daniel Boulet and RTMX Inc. 102729Sdfr * 112729Sdfr * This system call was implemented by Daniel Boulet under contract from RTMX. 122729Sdfr * 132729Sdfr * Redistribution and use in source forms, with and without modification, 142729Sdfr * are permitted provided that this entire comment appears intact. 152729Sdfr * 162729Sdfr * Redistribution in binary form may occur without any restrictions. 172729Sdfr * Obviously, it would be nice if you gave credit where credit is due 182729Sdfr * but requiring it would be too onerous. 192729Sdfr * 202729Sdfr * This software is provided ``AS IS'' without any warranties of any kind. 212729Sdfr */ 222729Sdfr 232729Sdfr#ifndef _SYS_MSG_H_ 242729Sdfr#define _SYS_MSG_H_ 252729Sdfr 26108048Smike#include <sys/cdefs.h> 27108048Smike#include <sys/_types.h> 282729Sdfr#include <sys/ipc.h> 292729Sdfr 302729Sdfr/* 312729Sdfr * The MSG_NOERROR identifier value, the msqid_ds struct and the msg struct 322729Sdfr * are as defined by the SV API Intel 386 Processor Supplement. 332729Sdfr */ 342729Sdfr 352729Sdfr#define MSG_NOERROR 010000 /* don't complain about too long msgs */ 362729Sdfr 37108048Smiketypedef unsigned long msglen_t; 38108048Smiketypedef unsigned long msgqnum_t; 39108048Smike 40108048Smike#ifndef _PID_T_DECLARED 41108048Smiketypedef __pid_t pid_t; 42108048Smike#define _PID_T_DECLARED 43108048Smike#endif 44108048Smike 45108048Smike#ifndef _TIME_T_DECLARED 46108048Smiketypedef __time_t time_t; 47108048Smike#define _TIME_T_DECLARED 48108048Smike#endif 49108048Smike 50108048Smike#ifndef _SIZE_T_DECLARED 51108048Smiketypedef __size_t size_t; 52108048Smike#define _SIZE_T_DECLARED 53108048Smike#endif 54108048Smike 55108048Smike#ifndef _SSIZE_T_DECLARED 56108048Smiketypedef __ssize_t ssize_t; 57108048Smike#define _SSIZE_T_DECLARED 58108048Smike#endif 59108048Smike 60108048Smike/* XXX namespace pollution. */ 6159839Speterstruct msg; 6259839Speter 632729Sdfrstruct msqid_ds { 642729Sdfr struct ipc_perm msg_perm; /* msg queue permission bits */ 652729Sdfr struct msg *msg_first; /* first message in the queue */ 662729Sdfr struct msg *msg_last; /* last message in the queue */ 67108048Smike msglen_t msg_cbytes; /* number of bytes in use on the queue */ 68108048Smike msgqnum_t msg_qnum; /* number of msgs in the queue */ 69108048Smike msglen_t msg_qbytes; /* max # of bytes on the queue */ 702729Sdfr pid_t msg_lspid; /* pid of last msgsnd() */ 712729Sdfr pid_t msg_lrpid; /* pid of last msgrcv() */ 722729Sdfr time_t msg_stime; /* time of last msgsnd() */ 732729Sdfr long msg_pad1; 742729Sdfr time_t msg_rtime; /* time of last msgrcv() */ 752729Sdfr long msg_pad2; 762729Sdfr time_t msg_ctime; /* time of last msgctl() */ 772729Sdfr long msg_pad3; 782729Sdfr long msg_pad4[4]; 792729Sdfr}; 802729Sdfr 81108048Smike#if __BSD_VISIBLE 822729Sdfr/* 832729Sdfr * Structure describing a message. The SVID doesn't suggest any 842729Sdfr * particular name for this structure. There is a reference in the 852729Sdfr * msgop man page that reads "The structure mymsg is an example of what 862729Sdfr * this user defined buffer might look like, and includes the following 872729Sdfr * members:". This sentence is followed by two lines equivalent 882729Sdfr * to the mtype and mtext field declarations below. It isn't clear 89101971Salfred * if "mymsg" refers to the name of the structure type or the name of an 902729Sdfr * instance of the structure... 912729Sdfr */ 922729Sdfrstruct mymsg { 932729Sdfr long mtype; /* message type (+ve integer) */ 942729Sdfr char mtext[1]; /* message body */ 952729Sdfr}; 96108048Smike#endif 972729Sdfr 9859839Speter#ifdef _KERNEL 9959839Speter 1002729Sdfr/* 1012729Sdfr * Based on the configuration parameters described in an SVR2 (yes, two) 1022729Sdfr * config(1m) man page. 1032729Sdfr * 1042729Sdfr * Each message is broken up and stored in segments that are msgssz bytes 1052729Sdfr * long. For efficiency reasons, this should be a power of two. Also, 1062729Sdfr * it doesn't make sense if it is less than 8 or greater than about 256. 1072729Sdfr * Consequently, msginit in kern/sysv_msg.c checks that msgssz is a power of 1082729Sdfr * two between 8 and 1024 inclusive (and panic's if it isn't). 1092729Sdfr */ 1102729Sdfrstruct msginfo { 1112729Sdfr int msgmax, /* max chars in a message */ 1122729Sdfr msgmni, /* max message queue identifiers */ 1132729Sdfr msgmnb, /* max chars in a queue */ 1142729Sdfr msgtql, /* max messages in system */ 1152729Sdfr msgssz, /* size of a message segment (see notes above) */ 1162729Sdfr msgseg; /* number of message segments */ 1172729Sdfr}; 1182836Sdgextern struct msginfo msginfo; 1192729Sdfr#endif 1202729Sdfr 12159839Speter#ifndef _KERNEL 1222729Sdfr 1232729Sdfr__BEGIN_DECLS 12492719Salfredint msgctl(int, int, struct msqid_ds *); 12592719Salfredint msgget(key_t, int); 126108048Smike/* XXX return value should be ssize_t. */ 127108048Smikeint msgrcv(int, void *, size_t, long, int); 128108048Smike/* XXX second parameter missing const type-qualifier. */ 12992719Salfredint msgsnd(int, void *, size_t, int); 130108048Smike#if __BSD_VISIBLE 131108048Smikeint msgsys(int, ...); 132108048Smike#endif 1332729Sdfr__END_DECLS 134108048Smike 13555205Speter#endif 1362729Sdfr 1372729Sdfr#endif /* !_SYS_MSG_H_ */ 138