Beispiel #1
0
int fpoll(int argc, descriptor *argv)	/*: await data from file */
   {
   FILE *f;
   int msec, r;
   fd_set fds;
   struct timeval tv, *tvp;

   /* check arguments */
   if (argc < 1)
      Error(105);
   if ((IconType(argv[1]) != 'f') || (FileStat(argv[1]) & Fs_Window))
      ArgError(1, 105);
   if (!(FileStat(argv[1]) & Fs_Read))
      ArgError(1, 212);
   f = FileVal(argv[1]);

   if (argc < 2)
      msec = -1;
   else {
      ArgInteger(2);
      msec = IntegerVal(argv[2]);
      }

   /* check for data already in buffer */
   /* there's no legal way to do this in C; we cheat */
#if defined(__GLIBC__) 					/* new GCC library */
   if (f->_IO_read_ptr < f->_IO_read_end)
      RetArg(1);
#elif defined(_FSTDIO)					/* new BSD library */
   if (f->_r > 0)
      RetArg(1);
#else							/* old AT&T library */
   if (f->_cnt > 0)
      RetArg(1);
#endif

   /* set up select(2) structure */
   FD_ZERO(&fds);			/* clear file bits */
   FD_SET(fileno(f), &fds);		/* set bit of interest */

   /* set up timeout and pointer */
   if (msec < 0)
      tvp = NULL;
   else {
      tv.tv_sec = msec / 1000;
      tv.tv_usec = (msec % 1000) * 1000;
      tvp = &tv;
      }

   /* poll the file using select(2) */
   r = select(fileno(f) + 1, &fds, (fd_set*)NULL, (fd_set*)NULL, tvp);

   if (r > 0)
      RetArg(1);			/* success */
   else if (r == 0)
      Fail;				/* timeout */
   else
      ArgError(1, 214);			/* I/O error */

}
Beispiel #2
0
vString vToken::All( int sToken ,int tToken)
{
	vString tmp;
	for ( int i=sToken;i<tToken;i++)
		tmp	+=RetArg(i);
	return tmp;
}
Beispiel #3
0
vString vToken::All( int sToken )
{
	vString tmp;
	for ( int i=sToken;i<GetSize();i++)
		tmp	+=RetArg(i);
	return tmp;
}