All pastes #416861 Raw Edit

Unnamed

public c v1 · immutable
#416861 ·published 2007-03-30 15:10 UTC
rendered paste body
#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <signal.h>#include <string.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include "message.h"    const char *p_name = "<empty>";static int nQueueID = -1;void print_usage_and_die() {	exit(-1);}void free_resources(void){	if(nQueueID != -1) {		if(msgctl(nQueueID, IPC_RMID, (struct msqid_ds *) 0) == -1) {			nQueueID = -1;			exit(-1);			}					nQueueID = -1;	}	}void print_error(const char *szMessage) {	if (szMessage != (const char *) 0) {		fprintf (stderr, szMessage);	}		free_resources();		exit(EXIT_FAILURE);}void allocate_resources(void) {	if ((nQueueID = msgget(KEY, PERM | IPC_CREAT)) == -1)	{		print_error("Can't access message queue!\n");	}}void clear_message(message_t * message) {	}void handler(int signal) {	free_resources();	exit(0);	}int main(int argc, char** argv) {	int c;	int id_counter = 0;	int running = 0;	message_t message;	p_name = argv[0];	char client_names[101][20];	char client_nick[21];		while((c = getopt(argc, argv, "m:")) != EOF) {		switch(c) {			case 'm':				nQueueID = (int)optarg;				running = 1;				break;			default:				nQueueID = KEY;				running = 1;				break;		}		} 		allocate_resources();		(void)signal(SIGTERM, handler);	(void)signal(SIGINT, handler);	(void)signal(SIGQUIT, handler);		while(1) {		if(msgrcv(nQueueID, &message, sizeof(message) - sizeof(long), 0,0) == -1) {			printf("recieve 1 failed: %s", message.s_message);			exit(-1);		}		/*		if(message.nType == 2) {			printf("REGISTER_TYPE");			strcpy(client_nick, message.s_nick);			//strcpy(client_names[id_counter], client_nick);	//		client_names[id_counter] = client_nick;			message.clientID = id_counter;			strcpy(message.s_nick, client_nick);			if(msgsnd(nQueueID, &message, sizeof(message) - sizeof(long), 0) == -1) {				exit(-1);				}					message.nType = 1;			id_counter++;		} else {*/					char buff[276];			strcpy(buff, message.s_nick);			strcat(buff, ": ");			strncat(buff, message.s_message, 250);			strcpy(message.s_message, buff);						printf(buff);						if(msgsnd(nQueueID, &message, sizeof(message) - sizeof(long), 0) == -1) {				exit(-1);			} 						//printf(buff);			//}	}		return EXIT_SUCCESS;	}