All pastes #416853 Raw Edit

Someone

public c v1 · immutable
#416853 ·published 2007-03-30 15:01 UTC
rendered paste body
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<signal.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#include"message.h"static int nQueueID = -1;int mode = 1;const char *p_name = "<empty>";void print_usage_and_die() {	exit(-1);}void free_resources(void){}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)) == -1)	{		print_error("Can't access message queue!\n");	}}void blah_handler(int signal) {		if(mode) {		mode = 1;		//printf("send");	}	else {		mode = 0;		//printf("recieve");	}		printf("mode: %d ", mode);}void register_client(char * nickname) {	message_t message;	message.nType = 2;	strcpy(message.s_nick, nickname);	if(msgsnd(nQueueID, &message, sizeof(message) - sizeof(long), 0) == -1) {			exit(-1);		}}int main(int argc, char** argv) {	int c;	int running = 1;		message_t message;	char s_message[256];		p_name = argv[0];	char nickname[21] = "default";	int clientID = -1;	nQueueID = KEY;		if(argc < 2) {		print_usage_and_die();	}				while((c = getopt(argc, argv, "n:m:")) != EOF) {		switch(c) {			case 'n':				if(strlen(optarg) > 20) {					printf("nickname darf nicht länger als 20 zeichen sein");					exit(-1);					} 				strcpy(nickname, optarg);				running = 1;				break;				case 'm':				nQueueID = (int)optarg;				break;			default:				print_usage_and_die();						}		}		(void)signal(SIGINT, blah_handler);	//(void)signal(EOF, blah_handler);	allocate_resources();			//register_client(nickname);	while(1) {		if(mode) {			fgets(s_message, 255, stdin);				strcpy(message.s_message, s_message);			strcpy(message.s_nick, nickname);			message.nType = MESSAGE_TYPE;			message.clientID = clientID;					if(msgsnd(nQueueID, &message, sizeof(message) - sizeof(long), 0) == -1)			{				exit(-1);				} 			mode = 0;		} else {						if(msgrcv(nQueueID, &message, sizeof(message) - sizeof(long), 0,0) == -1)			{				//exit(-1);				}/*			if(message.nType == 2) {				if(strcmp(message.s_nick, nickname) == 0)					clientID = clientID;//message.clientID;			} else {*/			printf(message.s_message);		}	}				return EXIT_SUCCESS;	}