⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgtool.c

📁 操作系统Interprocess Communication(IPC)实验源码。 在Unix的内核环境中
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MAX_SEND_SIZE 80struct mymsgbuf {  long mtype;  char mtext[MAX_SEND_SIZE];};void send_message(int qid,struct mymsgbuf *qbuf,long type,char *text);void read_message(int qid,struct mymsgbuf *qbuf,long type);void remove_queue(int qid);void change_queue_mode(int qid,char *mode);void usage(void);int main(int argc,char *argv[]){  key_t key;  int msgqueue_id;  struct mymsgbuf qbuf;    if (argc==1)    usage();  /* Create unique key via call to ftok() */  key=ftok(".",'m');  if ((msgqueue_id=msgget(key,IPC_CREAT|0666))==-1) {    perror("msgget");    exit(1);  }  switch (tolower(argv[1][0])) {  case 's':    send_message(msgqueue_id,&qbuf,		 atol(argv[2]),argv[3]);    break;  case 'r':    read_message(msgqueue_id,&qbuf,atol(argv[2]));    break;  case 'd':    remove_queue(msgqueue_id);    break;  case 'm':    change_queue_mode(msgqueue_id,argv[2]);    break;  }  return 0;}void send_message(int qid,struct mymsgbuf *qbuf,long type, char *text){  printf("Sending a message...\n");  qbuf->mtype=type;  strcpy(qbuf->mtext,text);  if (msgsnd(qid,(struct msgbuf*)qbuf,	     strlen(qbuf->mtext)+1,0)==-1) {    perror("msgsnd");    exit(1);  }}void read_message(int qid,struct mymsgbuf *qbuf, long type){  printf("Reading a message...\n");  qbuf->mtype=type;  msgrcv(qid,(struct msgbuf*)qbuf,MAX_SEND_SIZE,type,0);  printf("Type: %ld Text: %s\n",qbuf->mtype,qbuf->mtext);}void remove_queue(int qid){  msgctl(qid,IPC_RMID,0);}void change_queue_mode(int qid,char *mode){  struct msqid_ds myqueue_ds;  msgctl(qid,IPC_STAT,&myqueue_ds);  sscanf(mode,"%ho",&myqueue_ds.msg_perm.mode);  msgctl(qid,IPC_SET,&myqueue_ds);}void usage(){  fprintf(stderr,"msgtool-A utility for tinkering with msg queues\n");  fprintf(stderr,"\nUSAGE:msgtool (s)end<type><messagetext>\n");  fprintf(stderr,"                (r)ecv<type>\n");  fprintf(stderr,"                (d)elete\n");  fprintf(stderr,"                (m)ode<octal mode>\n");  exit(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -