Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Event ManagerProgrammer's Guide: HP-UX 11i v3Edition 1 > Chapter 4 Sample EVM Programming Operations

Handling Multiple I/O Sources

» 

Technical documentation

Complete book in PDF
» Feedback
Content starts here

 » Table of Contents

 » Index

You must not use EvmEventWait()to write a program that perform functions other than listening for events. For example, you may want to use the select system call to wait for I/O activity on multiple file descriptors, including the EVM connection.

Example 4-7 “ Handling Multiple I/O Sources” illustrates how to handle the EVM connection in conjunction with the input from stdin.

Example 4-7 “ Handling Multiple I/O Sources” introduces the following functions:

  • EvmConnFdGet — Returns the file descriptor (file number) associated with a specified connection. For more information about this function, see EvmConnFdGet(3).

  • EvmConnCheck — Checks whether any I/O activity is outstanding on a specified connection. For more information about this function, see EvmConnCheck(3).

Example 4-7  Handling Multiple I/O Sources

#include <stdio.h>#include <sys/time.h>#include <evm/evm.h>#include<string.h>void HandleInput();void EventCB(EvmConnection_t conn, EvmCallbackArg_t cbarg,	EvmCallbackData_t *cbdata);/*===============================================* Function: main()*===============================================*/int main(){ 	EvmConnection_t conn;	EvmStatus_t status;	fd_set read_fds;	int conn_fd;	EvmBoolean_t io_waiting;	status = EvmConnCreate(EvmCONNECTION_LISTEN,		EvmRESPONSE_CALLBACK,NULL,EventCB,NULL,&conn);	if (status != EvmERROR_NONE) {		fprintf(stderr,"Failed to create EVM listening connection\n");		exit(1);	}	status = EvmConnSubscribe(conn,NULL,"[name sys.unix.evm.msg.user]");	if(status != EvmERROR_NONE) {		fprintf(stderr,"Failed to subscribe for event notification\n");		exit(1);	}	/* Use EvmConnFdGet() to find the file descriptor assigned to the connection. */	EvmConnFdGet(conn,&conn_fd);		/* In this example, select is used to wait for I/O activity 	because this allows waiting on multiple file 	descriptors. When the select call returns, check to see	which of the file descriptors has activity, and deal 	with it appropriately.*/	for (;;) {		FD_ZERO(&read_fds);		FD_SET(fileno(stdin),&read_fds);		FD_SET(conn_fd,&read_fds);		select(FD_SETSIZE,&read_fds,NULL,NULL,NULL);		if (FD_ISSET(fileno(stdin),&read_fds))			HandleInput();				/* EvmConnCheck() is used here to determine whether any activity is outstanding on the EVM connection. Because the connection's file descriptor is known, FD_ISSET() could have been used for the same purpose.*/		status = EvmConnCheck(conn,&io_waiting);		if (status != EvmERROR_NONE) {			fprintf(stderr,"Connection error\n");			exit(1);		}		if (io_waiting) {			status = EvmConnDispatch(conn);			if (status != EvmERROR_NONE) {				fprintf(stderr,"Connection dispatch error\n");				exit(1);			}		}	}}/*===============================================* Function: HandleInput()*===============================================*//* The HandleInput() function reads lines of input from stdin and echoes them to stdout. It terminates the program on error or if an empty line is read. */void HandleInput(){	char buff[256];	if (feof(stdin))		exit(0);	if (fgets(buff,sizeof(buff),stdin) == NULL)		exit(0);	if (buff[0] == '\n')		 exit(0);	fprintf(stdout,buff);}/*===============================================* Function: EventCB()*===============================================*//* The event callback function is identical to the one used in the previous example. */void EventCB(EvmConnection_t conn, EvmCallbackArg_t cbarg,	EvmCallbackData_t *cbdata){ 	char buff[256];		switch (cbdata->reason)	{		case EvmREASON_EVENT_DELIVERED:			EvmEventFormat(buff, sizeof(buff), cbdata->event);			fprintf(stdout,"Event: %s\n",buff);			EvmEventDestroy(cbdata->event);			break;				default:			break;	}}
Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 2007 Hewlett-Packard Development Company, L.P.