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

📄 smpd_session.c

📁 fortran并行计算包
💻 C
📖 第 1 页 / 共 2 页
字号:
	{	    if (n < maxlen)	    {		strcpy(str, test);		smpd_exit_fn(FCNAME);		return SMPD_TRUE;	    }	    smpd_err_printf("buffer provided is too small: %d provided, %d needed\n", maxlen, n);	    smpd_exit_fn(FCNAME);	    return SMPD_FALSE;	}	token = strtok(NULL, ";:");    }    smpd_exit_fn(FCNAME);    return SMPD_FALSE;#endif}#ifndef HAVE_WINDOWS_Hsmpd_sig_fn_t *smpd_signal( int signo, smpd_sig_fn_t func ){    struct sigaction act, oact;    act.sa_handler = func;    sigemptyset( &act.sa_mask );    act.sa_flags = 0;    if ( signo == SIGALRM )    {#ifdef  SA_INTERRUPT        act.sa_flags |= SA_INTERRUPT;   /* SunOS 4.x */#endif    }    else    {#ifdef SA_RESTART        act.sa_flags |= SA_RESTART;     /* SVR4, 4.4BSD */#endif    }    if ( sigaction( signo,&act, &oact ) < 0 )        return ( SIG_ERR );    return( oact.sa_handler );}#endif#undef FCNAME#define FCNAME "smpd_create_process_struct"int smpd_create_process_struct(int rank, smpd_process_t **process_ptr){    int result;    smpd_process_t *p;    static int cur_id = 0;    smpd_enter_fn(FCNAME);    p = (smpd_process_t*)MPIU_Malloc(sizeof(smpd_process_t));    if (p == NULL)    {	*process_ptr = NULL;	smpd_exit_fn(FCNAME);	return SMPD_FAIL;    }    p->id = cur_id++; /* MT - If smpd is to be thread safe, this will have to be changed */    p->rank = rank;    p->nproc = 1;    p->kvs_name[0] = '\0';    p->domain_name[0] = '\0';    p->exe[0] = '\0';    p->env[0] = '\0';    p->dir[0] = '\0';    p->path[0] = '\0';    p->clique[0] = '\0';    p->err_msg[0] = '\0';    p->stdin_write_list = NULL;    result = smpd_create_context(SMPD_CONTEXT_STDIN, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->in);    if (result != SMPD_SUCCESS)    {	MPIU_Free(p);	*process_ptr = NULL;	smpd_err_printf("unable to create stdin context.\n");	smpd_exit_fn(FCNAME);	return SMPD_FAIL;    }    result = smpd_create_context(SMPD_CONTEXT_STDOUT, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->out);    if (result != SMPD_SUCCESS)    {	MPIU_Free(p);	*process_ptr = NULL;	smpd_err_printf("unable to create stdout context.\n");	smpd_exit_fn(FCNAME);	return SMPD_FAIL;    }    result = smpd_create_context(SMPD_CONTEXT_STDERR, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->err);    if (result != SMPD_SUCCESS)    {	MPIU_Free(p);	*process_ptr = NULL;	smpd_err_printf("unable to create stderr context.\n");	smpd_exit_fn(FCNAME);	return SMPD_FAIL;    }    result = smpd_create_context(SMPD_CONTEXT_PMI, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->pmi);    if (result != SMPD_SUCCESS)    {	MPIU_Free(p);	*process_ptr = NULL;	smpd_err_printf("unable to create pmi context.\n");	smpd_exit_fn(FCNAME);	return SMPD_FAIL;    }    p->in->rank = rank;    p->out->rank = rank;    p->err->rank = rank;    p->num_valid_contexts = 3;    p->context_refcount = 0;    p->exitcode = 0;    p->in->process = p;    p->out->process = p;    p->err->process = p;    p->pmi->process = p;    p->next = NULL;    p->spawned = 0;    p->local_process = SMPD_TRUE;    p->is_singleton_client = SMPD_FALSE;    p->map_list = NULL;    p->appnum = 0;    *process_ptr = p;    smpd_exit_fn(FCNAME);    return SMPD_SUCCESS;}#undef FCNAME#define FCNAME "smpd_process_to_string"SMPD_BOOL smpd_process_to_string(char **str_pptr, int *len_ptr, int indent, smpd_process_t *process){    char indent_str[SMPD_MAX_TO_STRING_INDENT+1];    smpd_enter_fn(FCNAME);    if (*len_ptr < 1)    {	smpd_exit_fn(FCNAME);	return SMPD_FALSE;    }    if (indent > SMPD_MAX_TO_STRING_INDENT)    {	indent = SMPD_MAX_TO_STRING_INDENT;    }    memset(indent_str, ' ', indent);    indent_str[indent] = '\0';    smpd_snprintf_update(str_pptr, len_ptr, "%sid: %d\n", indent_str, process->id);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%srank: %d\n", indent_str, process->rank);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%sexe: %s\n", indent_str, process->exe);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%sdir: %s\n", indent_str, process->dir);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%senv: %s\n", indent_str, process->env);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%spath: %s\n", indent_str, process->path);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%spid: %d\n", indent_str, process->pid);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%sexitcode: %d\n", indent_str, process->exitcode);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%scontext_refcount: %s\n", indent_str, process->context_refcount);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%serr_msg: %s\n", indent_str, process->err_msg);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%snum_valid_contexts: %d\n", indent_str, process->num_valid_contexts);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%s in: %p\n", indent_str, process->in);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%s out: %p\n", indent_str, process->out);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%s err: %p\n", indent_str, process->err);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%s pmi: %p\n", indent_str, process->pmi);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%skvs_name: %s\n", indent_str, process->kvs_name);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%snproc: %d\n", indent_str, process->nproc);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }#ifdef HAVE_WINDOWS_H    smpd_snprintf_update(str_pptr, len_ptr, "%swait: %p:%p\n", indent_str, process->wait.hProcess, process->wait.hThread);#else    smpd_snprintf_update(str_pptr, len_ptr, "%swait: %d\n", indent_str, (int)process->wait);#endif    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }    smpd_snprintf_update(str_pptr, len_ptr, "%snext: %p\n", indent_str, process->next);    if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } /* this misses the case of an exact fit */    smpd_exit_fn(FCNAME);    return SMPD_TRUE;}#undef FCNAME#define FCNAME "smpd_free_process_struct"int smpd_free_process_struct(smpd_process_t *process){    smpd_enter_fn(FCNAME);    if (process == NULL)    {	smpd_dbg_printf("smpd_free_process_struct passed NULL process pointer.\n");	smpd_exit_fn(FCNAME);	return SMPD_SUCCESS;    }    if (process->in)	smpd_free_context(process->in);    process->in = NULL;    if (process->out)	smpd_free_context(process->out);    process->out = NULL;    if (process->err)	smpd_free_context(process->err);    process->err = NULL;    if (process->pmi)	smpd_free_context(process->pmi);    process->pmi = NULL;    process->dir[0] = '\0';    process->env[0] = '\0';    process->exe[0] = '\0';    process->path[0] = '\0';    process->pid = -1;    process->rank = -1;    process->next = NULL;    MPIU_Free(process);    smpd_exit_fn(FCNAME);    return SMPD_SUCCESS;}#undef FCNAME#define FCNAME "smpd_interpret_session_header"int smpd_interpret_session_header(char *str){    char temp_str[100];    smpd_enter_fn(FCNAME);    smpd_dbg_printf("interpreting session header: \"%s\"\n", str);    /* get my id */    if (MPIU_Str_get_string_arg(str, "id", temp_str, 100) == MPIU_STR_SUCCESS)    {	smpd_dbg_printf(" id = %s\n", temp_str);	smpd_process.id = atoi(temp_str);	if (smpd_process.id < 0)	{	    smpd_err_printf("invalid id passed in session header: %d\n", smpd_process.id);	    smpd_process.id = 0;	}    }    /* get my parent's id */    if (MPIU_Str_get_string_arg(str, "parent", temp_str, 100) == MPIU_STR_SUCCESS)    {	smpd_dbg_printf(" parent = %s\n", temp_str);	smpd_process.parent_id = atoi(temp_str);	if (smpd_process.parent_id < 0)	{	    smpd_err_printf("invalid parent id passed in session header: %d\n", smpd_process.parent_id);	    smpd_process.parent_id = -1;	}    }    /* get my level */    if (MPIU_Str_get_string_arg(str, "level", temp_str, 100) == MPIU_STR_SUCCESS)    {	smpd_dbg_printf(" level = %s\n", temp_str);	smpd_process.level = atoi(temp_str);	if (smpd_process.level < 0)	{	    smpd_err_printf("invalid session level passed in session header: %d\n", smpd_process.level);	    smpd_process.level = 0;	}    }    smpd_exit_fn(FCNAME);    return SMPD_SUCCESS;}

⌨️ 快捷键说明

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