pgm_ipc_msgq_server.c

来自「Linux MessageQueue Sample code」· C语言 代码 · 共 55 行

C
55
字号
  /* SERVER-receives messages from clients  */
       
#include "local.h" 
#include <iostream> 
#include <cstdio> 
#include <ctype.h> 
#include <stdlib.h> 
using namespace std; 

int main(int argc, char *argv[ ])
{ 
	int     mid, n; 
	MESSAGE msg; 
	void    process_msg(char *, int);
	cout<<"Server is active"<<endl;
	if (argc != 3) 
	{ 
		cerr << "Usage: " << argv[0] << " msq_id &" << endl; 
		return 1; 
	} 
	mid = atoi(argv[1]); 
	while (1) 
	{ 
		memset( msg.buffer, 0x0, BUFSIZ );      
		if ((n=msgrcv(mid, &msg, BUFSIZ, SERVER, 0)) == -1 )
		{ 
			perror("Server: msgrcv"); 
			return 2; 
		} 
		else if (n == 0) 
		break;                
		process_msg(msg.buffer, strlen(msg.buffer)); 
		msg.msg_to = msg.msg_fm; 
		msg.msg_fm = SERVER; 
		n += sizeof(msg.msg_fm); 
		if (msgsnd(mid, &msg, n, 0) == -1 )
		{   
			perror("Server: msgsnd"); 
			return 3; 
		} 
	} 
	cout<<"server ends"<<endl;
	msgctl(mid, IPC_RMID, (struct msqid_ds *) 0 );   
	exit(0); 
	} 
      /* 
         Convert lowercase alphabetics to uppercase 
    */ 
void  process_msg(char *b, int len)
{ 
  for (int i = 0; i < len; ++i) 
    if (isalpha(*(b + i))) 
    *(b + i) = toupper(*(b + i)); 
} 

⌨️ 快捷键说明

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