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

📄 uni_pmiutil.c

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 C
字号:
/* -*- Mode: C; c-basic-offset:4 ; -*- *//*  $Id: uni_pmiutil.c,v 1.2 2003/02/17 14:23:02 gropp 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 "uni_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.*/#ifdef FOOstruct 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 ) {	f print f( stderr, "[%s]: ", PMIU_print_id );	va_start( ap, fmt );	vfprintf( stderr, fmt, ap );	va_end( ap );	fflush( stderr );    }}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 );	}        MPIU_Strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].key, keystart, MAXKEYLEN );	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++;        MPIU_Strncpy( PMIU_keyval_tab[PMIU_keyval_tab_idx].value, valstart, MAXVALLEN );	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( const char *keystr, char *valstr ){    int i;    for (i=0; i < PMIU_keyval_tab_idx; i++) {       if ( strncmp( keystr, PMIU_keyval_tab[i].key, MAXKEYLEN ) == 0 ) { 	    MPIU_Strncpy( valstr, PMIU_keyval_tab[i].value, MAXVALLEN );	    return valstr;       }     }    valstr[0] = '\0';    return NULL;}void PMIU_chgval( const char *keystr, char *valstr ){    int i;    for ( i = 0; i < PMIU_keyval_tab_idx; i++ ) {       if ( strncmp( keystr, PMIU_keyval_tab[i].key, MAXKEYLEN ) == 0 )	   MPIU_Strncpy( PMIU_keyval_tab[i].value, valstr, MAXVALLEN );    }}#endif

⌨️ 快捷键说明

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