added epicsGetStdin/epicsSetStdin and stdout and stderr

This commit is contained in:
Marty Kraimer
2004-07-08 11:55:46 +00:00
parent f212fae267
commit cb34e16385
3 changed files with 80 additions and 5 deletions
+63 -1
View File
@@ -16,7 +16,69 @@
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include "epicsThread.h"
#define epicsExportSharedSymbols
#define epicsStdioPVT
#include "epicsStdio.h"
/* Currently this file has nothing*/
static epicsThreadOnceId onceId = EPICS_THREAD_ONCE_INIT;
static epicsThreadPrivateId stdinThreadPrivateId;
static epicsThreadPrivateId stdoutThreadPrivateId;
static epicsThreadPrivateId stderrThreadPrivateId;
static void once(void *junk)
{
stdinThreadPrivateId = epicsThreadPrivateCreate();
stdoutThreadPrivateId = epicsThreadPrivateCreate();
stderrThreadPrivateId = epicsThreadPrivateCreate();
}
FILE * epicsShareAPI epicsGetStdin(void)
{
FILE *fp;
epicsThreadOnce(&onceId,once,0);
fp = epicsThreadPrivateGet(stdinThreadPrivateId);
if(!fp) fp = stdin;
return fp;
}
void epicsShareAPI epicsSetStdin(FILE *fp)
{
epicsThreadOnce(&onceId,once,0);
epicsThreadPrivateSet(stdinThreadPrivateId,fp);
}
FILE * epicsShareAPI epicsGetStdout(void)
{
FILE *fp;
epicsThreadOnce(&onceId,once,0);
fp = epicsThreadPrivateGet(stdoutThreadPrivateId);
if(!fp) fp = stdout;
return fp;
}
void epicsShareAPI epicsSetStdout(FILE *fp)
{
epicsThreadOnce(&onceId,once,0);
epicsThreadPrivateSet(stdoutThreadPrivateId,fp);
}
FILE * epicsShareAPI epicsGetStderr(void)
{
FILE *fp;
epicsThreadOnce(&onceId,once,0);
fp = epicsThreadPrivateGet(stderrThreadPrivateId);
if(!fp) fp = stderr;
return fp;
}
void epicsShareAPI epicsSetStderr(FILE *fp)
{
epicsThreadOnce(&onceId,once,0);
epicsThreadPrivateSet(stderrThreadPrivateId,fp);
}
+16
View File
@@ -29,6 +29,22 @@ epicsShareFunc void epicsShareAPI epicsTempName (
char * pNameBuf, size_t nameBufLength );
epicsShareFunc FILE * epicsShareAPI epicsTempFile ();
epicsShareFunc FILE * epicsShareAPI epicsGetStdin(void);
epicsShareFunc FILE * epicsShareAPI epicsGetStdout(void);
epicsShareFunc FILE * epicsShareAPI epicsGetStderr(void);
epicsShareFunc void epicsShareAPI epicsSetStdin(FILE *);
epicsShareFunc void epicsShareAPI epicsSetStdout(FILE *);
epicsShareFunc void epicsShareAPI epicsSetStderr(FILE *);
#ifndef epicsStdioPVT
#undef stdin
#define stdin epicsGetStdin()
#undef stdout
#define stdout epicsGetStdout()
#undef stderr
#define stderr epicsGetStderr()
#endif /* epicsStdioPVT */
/*
* truncate to specified size (we dont use truncate()
+1 -4
View File
@@ -699,10 +699,7 @@ void *epicsThreadPrivateGet(epicsThreadPrivateId id)
void *value;
assert(epicsThreadOnceCalled);
value = pthread_getspecific(*key);
if(errVerbose && !value)
errlogPrintf("epicsThreadPrivateGet: pthread_getspecific returned 0\n");
return(value);
return pthread_getspecific(*key);
}
double epicsThreadSleepQuantum ()