This is Unofficial EPICS BASE Doxygen Site
pvinfo.cpp File Reference
#include <iostream>
#include <pva/client.h>
#include <pv/caProvider.h>
#include <stdio.h>
#include <epicsStdlib.h>
#include <epicsGetopt.h>
#include <epicsThread.h>
#include <pv/logger.h>
#include <pv/lock.h>
#include <vector>
#include <string>
#include <sstream>
#include <pv/event.h>
#include <epicsExit.h>
#include "pvutils.h"
+ Include dependency graph for pvinfo.cpp:

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

Function Documentation

int main ( int  argc,
char *  argv[] 
)

Definition at line 103 of file pvinfo.cpp.

104 {
105  int opt; /* getopt() current option */
106  bool debug = false;
107 
108  setvbuf(stdout,NULL,_IOLBF,BUFSIZ); /* Set stdout to line buffering */
109 
110  while ((opt = getopt(argc, argv, ":hVw:p:dc")) != -1) {
111  switch (opt) {
112  case 'h': /* Print usage */
113  usage();
114  return 0;
115  case 'V': /* Print version */
116  {
117  fprintf(stdout, "pvAccess %u.%u.%u%s\n",
118  EPICS_PVA_MAJOR_VERSION,
119  EPICS_PVA_MINOR_VERSION,
120  EPICS_PVA_MAINTENANCE_VERSION,
121  (EPICS_PVA_DEVELOPMENT_FLAG)?"-SNAPSHOT":"");
122  fprintf(stdout, "pvData %u.%u.%u%s\n",
123  EPICS_PVD_MAJOR_VERSION,
124  EPICS_PVD_MINOR_VERSION,
125  EPICS_PVD_MAINTENANCE_VERSION,
126  (EPICS_PVD_DEVELOPMENT_FLAG)?"-SNAPSHOT":"");
127  fprintf(stdout, "Base %s\n", EPICS_VERSION_FULL);
128  return 0;
129  }
130  case 'w': /* Set PVA timeout value */
131  {
132  double temp;
133  if((epicsScanDouble(optarg, &temp)) != 1 || timeout <= 0.0)
134  {
135  fprintf(stderr, "'%s' is not a valid timeout value "
136  "- ignored. ('pvget -h' for help.)\n", optarg);
137  } else {
138  timeout = temp;
139  }
140  }
141  break;
142  case 'p': /* Set default provider */
144  break;
145  case 'd': /* Debug log level */
146  debug = true;
147  break;
148  case 'c': /* Clean-up and report used instance count */
149  break;
150  case '?':
151  fprintf(stderr,
152  "Unrecognized option: '-%c'. ('pvinfo -h' for help.)\n",
153  optopt);
154  return 1;
155  case ':':
156  fprintf(stderr,
157  "Option '-%c' requires an argument. ('pvinfo -h' for help.)\n",
158  optopt);
159  return 1;
160  default :
161  usage();
162  return 1;
163  }
164  }
165 
166  if (argc == optind)
167  {
168  fprintf(stderr, "No pv name(s) specified. ('pvinfo -h' for help.)\n");
169  return 1;
170  }
171 
173 
174  std::vector<std::tr1::shared_ptr<GetInfo> > infos;
175 
176  pva::ca::CAClientFactory::start();
177 
178  {
180 
181  for(int i = optind; i<argc; i++) {
182  pvac::ClientChannel chan(prov.connect(argv[i]));
183  std::tr1::shared_ptr<GetInfo> info(new GetInfo(chan));
184  info->op = chan.info(info.get());
185  infos.push_back(info);
186  }
187 
188  Tracker::prepare(); // install signal handler
189 
190  {
192  while(Tracker::inprog.size() && !Tracker::abort) {
193  UnGuard U(G);
194  if(timeout<=0)
195  Tracker::doneEvt.wait();
196  else if(!Tracker::doneEvt.wait(timeout)) {
197  haderror = 1;
198  std::cerr<<"Timeout\n";
199  break;
200  }
201  }
202  }
203  }
204 
205  return haderror ? 1 : 0;
206 }
double timeout
Definition: pvutils.cpp:25
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition: epicsGetopt.c:65
static epicsMutex doneLock
Definition: pvutils.h:47
int i
Definition: scan.c:967
int optind
Definition: epicsGetopt.c:50
static void prepare()
Definition: pvutils.cpp:49
#define SET_LOG_LEVEL(level)
Definition: logger.h:50
static epicsEvent doneEvt
Definition: pvutils.h:48
#define NULL
Definition: catime.c:38
#define epicsScanDouble(str, to)
Definition: epicsStdlib.h:78
int optopt
Definition: epicsGetopt.c:50
static inprog_t inprog
Definition: pvutils.h:50
#define stdout
Definition: epicsStdio.h:30
Central client context.
Definition: client.h:517
#define stderr
Definition: epicsStdio.h:32
std::string defaultProvider
char * optarg
Definition: epicsGetopt.c:55
static bool abort
Definition: pvutils.h:51
void usage(void)
Definition: cainfo.c:36