daemons.c
上传用户:lukesailor
上传日期:2007-01-04
资源大小:27k
文件大小:1k
源码类别:

Ftp客户端

开发平台:

Unix_Linux

  1. /* $Id: daemons.c,v 1.1 1998/10/28 23:22:22 agulbra Exp $ */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8. #include <fcntl.h>
  9. #include <ctype.h>
  10. #include "ftpd.h"
  11. int daemons( void )
  12. {
  13.     char buf[2049];
  14.     int f;
  15.     int r;
  16.     int b, e;
  17.     int c;
  18.     int d;
  19.     d = 0;
  20.     f = open( "/proc/net/tcp", O_RDONLY );
  21.     if ( f < 0 )
  22. return d;
  23.     buf[2048] = '';
  24.     b = 0;
  25.     e = 0;
  26.     do {
  27. r = read( f, buf+e, 2048-e );
  28. if ( r <= 0 ) /* ignore errors.  0 is okay, in fact common. */
  29.     break;
  30. e += r;
  31. /* b now is offset of the start of the first line to be parsed
  32.    and e the end of the available data */
  33. c = b;
  34. while( c < e && buf[c] != 'n' )
  35.     c++;
  36. while ( c < e ) {
  37.     buf[c++] = '';
  38.     while( b < c && buf[b] != ':' && buf[b] != 'n' )
  39. b++;
  40.     if ( b < c && buf[b] == ':' ) {
  41. b++;
  42. while( b < e && buf[b] != ':' )
  43.     b++;
  44. b++;
  45. if ( strtoul( buf+b, NULL, 16 ) == 21 )
  46.     d++;
  47.     }
  48.     b = c;
  49.     while( c < e && buf[c] != 'n' )
  50. c++;
  51. }
  52. if ( e > b )
  53.     (void)memmove( buf, buf+b, e-b );
  54. e = e-b;
  55. b = 0;
  56.     } while( 1 );
  57.     close( f );
  58.     if ( d > 0 )
  59. d--; /* don't count inetd, but also don't report -1 */
  60.     return d;
  61. }