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

📄 simple_pmiutil.c

📁 刚才是说明 现在是安装程序在 LINUX环境下进行编程的MPICH安装文件
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//*  $Id: simple_pmiutil.c,v 1.1 2002/10/07 23:54:58 toonen Exp $ * *  (C) 2001 by Argonne National Laboratory. *      See COPYRIGHT in top-level directory. *//* Utility functions associated with PMI implementation, but not part of   the PMI interface itself.  Reading and writing on pipes, signals, and parsing   key=value messages*/#include <stdio.h>#include <stdarg.h>#include <string.h>#include <unistd.h>#include <errno.h>#include "simple_pmiutil.h"#define MAXVALLEN 1024#define MAXKEYLEN   32/* These are not the keyvals in the keyval space that is part of the PMI specification.   They are just part of this implementation's internal utilities.*/struct PMIU_keyval_pairs {    char key[MAXKEYLEN];    char value[MAXVALLEN];	};struct PMIU_keyval_pairs PMIU_keyval_tab[64];int  PMIU_keyval_tab_idx;void PMIU_printf( int print_flag, char *fmt, ... ){    va_list ap;    if ( print_flag ) {	fprintf( stderr, "[%s]: ", PMIU_print_id );	va_start( ap, fmt );	vfprintf( stderr, fmt, ap );	va_end( ap );	fflush( stderr );    }}/* This function reads until it finds a newline character.  It returns the number of   characters read, including the newline character.  The newline character is stored   in buf, as in fgets.  It does not supply a string-terminating null character.*/int PMIU_readline( int fd, char *buf, int maxlen ){    int n, rc;    char c, *ptr;    ptr = buf;    for ( n = 1; n < maxlen; n++ ) {      again:	rc = read( fd, &c, 1 );	if ( rc == 1 ) {	    *ptr++ = c;	    if ( c == '\n' )	/* note \n is stored, like in fgets */		break;	}	else if ( rc == 0 ) {	    if ( n == 1 )		return( 0 );	/* EOF, no data read */	    else		break;		/* EOF, some data read */	}	else {	    if ( errno == EINTR )		goto again;	    return ( -1 );	/* error, errno set by read */	}    }    *ptr = 0;			/* null terminate, like fgets */    PMIU_printf( 0, " received :%s:\n", buf );    return( n );}int PMIU_writeline( int fd, char *buf )	{    int size, n;    size = strlen( buf );    if ( size > PMIU_MAXLINE ) {	buf[PMIU_MAXLINE-1] = '\0';	PMIU_printf( 1, "write_line: message string too big: :%s:\n", buf );    }    else if ( buf[strlen( buf ) - 1] != '\n' )  /* error:  no newline at end */	    PMIU_printf( 1, "write_line: message string doesn't end in newline: :%s:\n",		       buf );    else {	n = write( fd, buf, size );	if ( n < 0 ) {	    PMIU_printf( 1, "write_line error; fd=%d buf=:%s:\n", fd, buf );	    perror("system msg for write_line failure ");	    return(-1);	}	if ( n < size)	    PMIU_printf( 1, "write_line failed to write entire message\n" );    }    return 0;}int PMIU_parse_keyvals( char *st ){    char *p, *keystart, *valstart;    if ( !st )	return( -1 );    PMIU_keyval_tab_idx = 0;              p = st;    while ( 1 ) {	while ( *p == ' ' )	    p++;	/* got non-blank */	if ( *p == '=' ) {	    PMIU_printf( 1, "PMIU_parse_keyvals:  unexpected = at character %d in %s\n",		       p - st, st );	    return( -1 );	}	if ( *p == '\n' || *p == '\0' )	    return( 0 );	/* normal exit */	/* got normal character */	keystart = p;		/* remember where key started */	while ( *p != ' ' && *p != '=' && *p != '\n' && *p != '\0' )	    p++;	if ( *p == ' ' || *p == '\n' || *p == '\0' ) {	    PMIU_printf( 1,	       "PMIU_parse_keyvals: unexpected key delimiter at character %d in %s\n",		       p - st, st );	    return( -1 );	}        strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].key, keystart, p - keystart );	PMIU_keyval_tab[PMIU_keyval_tab_idx].key[p - keystart] = '\0'; /* store key */	valstart = ++p;			/* start of value */	while ( *p != ' ' && *p != '\n' && *p != '\0' )	    p++;        strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].value, valstart, p - valstart );	PMIU_keyval_tab[PMIU_keyval_tab_idx].value[p - valstart] = '\0'; /* store value */	PMIU_keyval_tab_idx++;	if ( *p == ' ' )	    continue;	if ( *p == '\n' || *p == '\0' )	    return( 0 );	/* value has been set to empty */    }} void PMIU_dump_keyvals( void ){    int i;    for (i=0; i < PMIU_keyval_tab_idx; i++) 	PMIU_printf(1, "  %s=%s\n",PMIU_keyval_tab[i].key, PMIU_keyval_tab[i].value);}char *PMIU_getval( char *keystr, char *valstr, int vallen ){    int i;        for (i = 0; i < PMIU_keyval_tab_idx; i++) {	if ( strcmp( keystr, PMIU_keyval_tab[i].key ) == 0 ) { 	    strncpy( valstr, PMIU_keyval_tab[i].value, vallen - 1 );	    valstr[vallen - 1] = '\0';	    return valstr;       }     }    valstr[0] = '\0';    return NULL;}void PMIU_chgval( char *keystr, char *valstr ){    int i;        for ( i = 0; i < PMIU_keyval_tab_idx; i++ ) {	if ( strcmp( keystr, PMIU_keyval_tab[i].key ) == 0 ) {	    strncpy( PMIU_keyval_tab[i].value, valstr, MAXVALLEN - 1 );	    PMIU_keyval_tab[i].value[MAXVALLEN - 1] = '\0';	}    }}

⌨️ 快捷键说明

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