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

📄 os.c

📁 Parallel programming/Lou Baker, Bradley J.Smith .—New York:McGraw-Hill Book Co.
💻 C
字号:
/* PSPH - Parallel SPH program
 * Bradley Smith and Lou Baker, Dagonet Software
 */
static char sccs_id[] = "@(#) /home2/bsmith/src/psph/SCCS/s.os.c 1.9 94/03/14";

/*
 * Potentially Operating System Specific Stuff
 */

#include "all.h"

#ifdef DEBUG
int DebugFlag = FALSE;
#endif

void
PPrintString(char *s)
{
#ifdef PRINTROOT
 OnePrintString(s);
#else
 printf("%s",s);
#endif
}

static char out_str[1024];

void
Debug(char *fmt, ...)
{
#ifdef DEBUG
 va_list args;
 va_start(args,fmt);
 vsprintf(out_str,fmt,args);
 PPrintString(out_str);
 va_end(args);
#else
#endif
}

void
UserMessage(char * fmt,...)
{
 va_list args;
 va_start(args,fmt);
 vsprintf(out_str,fmt,args);
 PPrintString(out_str);
 va_end(args);
}

void
ReportError(char * s, int status_fatal)
{
 PPrintString(s);
 if(status_fatal)
	{
	LogFatalError(s);
	Exit(status_fatal);
	}
}

void
LogFatalError(char *s)
{
 /* Attempt to open a fatal error log */
 FILE *f;
 char fatal_log[120];
 char *home;

 if((home = getenv("HOME")) == NULL)
#ifdef WINDOWS
	home = "\\";
#else
	home = "/tmp";
#endif

 sprintf(fatal_log, "%s/psph.log", home);

 if((f=fopen(fatal_log,"a")) != NULL)
	{
#ifdef PVM
	fprintf(f,"[%d] [%x] %s", Rank, pvm_mytid(), s);
#else
	fprintf(f,"[%d] %s", Rank, s);
#endif
	fclose(f);
	}
}

void
Exit(int status)
{
 char msg[80];
 if(status == 0)
	ExitMPISystem();
 else
	{
	sprintf(msg, "Proc %d is abnormally exiting psph (status=%d)\n", Rank, status);
	PPrintString(msg);
	LogFatalError(msg);
#ifdef PVM
	pvm_perror("PVM Error ");
#endif
	MPI_Abort(MPI_COMM_WORLD, status);
	}
 exit(status);
}

void
Report(char * s)
{
 PPrintString(s);
}

void *
New(SIZETYPE size)
{
 void *p;
#ifdef DEBUG
 if(size == 0)
	Debug("New() called with size == 0!\n");
#endif
 if((p=malloc(size)) == NULL)
	ReportError("Out of memory\n",TRUE);
 return p;
}

void *
ReAlloc(void *old, SIZETYPE size)
{
 void *p;
  char str[256];
#ifdef DEBUG
 if(size == 0 || old == NULL)
	Debug("ReAlloc called with size == 0 or old ptr==NULL\n");
#endif
 if((p=realloc(old, size)) == NULL)
	ReportError("Out of memory in ReAlloc\n", TRUE);
 return(p);
}

void
Delete(void *p)
{
#ifdef DEBUG
 if(p== NULL)
	Debug("WARNING - Delete(NULL) called in os.c\n");
#endif
 free(p);
}

⌨️ 快捷键说明

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