Suse下可以运行  但有两点不太明白,求兄弟们指点指点,谢谢!!!

不知道这个daemon_inetd()中这两个参数怎么使用  char *pname和int facility?
 

不知道用这个daemon_inetd()怎么把这个daemon_proc初始化?

  1. #include<sys/socket.h>  
  2. #include<strings.h>  
  3. #include<string.h>  
  4. #include<stdio.h>  
  5. #include<arpa/inet.h>  
  6. #include<unistd.h>  
  7. #include<stdlib.h>  
  8.  
  9. #include<syslog.h>  
  10. #include<stdarg.h>  
  11. #include<errno.h>  
  12.  
  13. #include<signal.h>  
  14. #include<fcntl.h>  
  15.  
  16. #define SA      struct sockaddr  
  17. #define MAXLINE 4096  
  18. #define MAXFD   64  
  19.  
  20. int     daemon_proc;    /* set nonzero by daemon_init() */ 
  21.  
  22. static void err_doit(int errnoflag, int level, const char *fmt, va_list ap);  
  23. void err_quit(const char *fmt, ...);  
  24. void err_sys(const char *fmt, ...);  
  25. void daemon_inetd(const char *pname, int facility);  
  26.  
  27. int 
  28. main(int argc, char **argv)  
  29. {  
  30.     int                 sockfd, n;  
  31.     char                recvline[MAXLINE + 1];  
  32.     struct sockaddr_in  servaddr;  
  33.  
  34.     if (argc < 2)  
  35.         err_quit("usage: a.out <IPaddress>");  
  36.  
  37.     if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)  
  38.         err_sys("socket error");  
  39.  
  40.     bzero(&servaddr, sizeof(servaddr));  
  41.     servaddr.sin_family = PF_INET;  
  42.     servaddr.sin_port   = htons(1313);  /* daytime server */ 
  43.     if (inet_pton(PF_INET, argv[1], &servaddr.sin_addr) <= 0)  
  44.         err_quit("inet_pton error for %s", argv[1]);  
  45.  
  46.     if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)  
  47.         err_sys("connect error");  
  48.  
  49.     while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {  
  50.         recvline[n] = 0;    /* null terminate */ 
  51.         if (fputs(recvline, stdout) == EOF)  
  52.             err_sys("fputs error");  
  53.     }  
  54.     if (n < 0)  
  55.         err_sys("read error");  
  56.  
  57.     exit(0);  
  58. }  
  59.  
  60. /* Fatal error related to a system call.  
  61.  * Print a message and terminate. */ 
  62. void 
  63. err_sys(const char *fmt, ...)  
  64. {  
  65.     va_list     ap;  
  66.  
  67.     va_start(ap, fmt);  
  68.     err_doit(1, LOG_ERR, fmt, ap);  
  69.     va_end(ap);  
  70.     exit(1);  
  71. }  
  72.  
  73. /* Fatal error unrelated to a system call.  
  74.  * Print a message and terminate. */ 
  75. void 
  76. err_quit(const char *fmt, ...)  
  77. {  
  78.     va_list     ap;  
  79.  
  80.     va_start(ap, fmt);  
  81.     err_doit(0, LOG_ERR, fmt, ap);  
  82.     va_end(ap);  
  83.     exit(1);  
  84. }  
  85.  
  86. /* Print a message and return to caller.  
  87.  * Caller specifies "errnoflag" and "level". */ 
  88. static void 
  89. err_doit(int errnoflag, int level, const char *fmt, va_list ap)  
  90. {  
  91.     int     errno_save, n;  
  92.     char    buf[MAXLINE];  
  93.  
  94.     errno_save = errno;     /* value caller might want printed */ 
  95. #ifdef  HAVE_VSNPRINTF  
  96.     vsnprintf(buf, sizeof(buf), fmt, ap);   /* this is safe */ 
  97. #else  
  98.     vsprintf(buf, fmt, ap);                 /* this is not safe */ 
  99. #endif  
  100.     n = strlen(buf);  
  101.     if (errnoflag)  
  102.         snprintf(buf+n, sizeof(buf)-n, ": %s", strerror(errno_save));  
  103.     strcat(buf, "\n");  
  104.  
  105.     if (daemon_proc) {  
  106.         syslog(level, buf);  
  107.     } else {  
  108.         fflush(stdout);     /* in case stdout and stderr are the same */ 
  109.         fputs(buf, stderr);  
  110.         fflush(stderr);  
  111.     }  
  112.     return;  
  113. }  
  114.  
  115. void 
  116. daemon_inetd(const char *pname, int facility)  
  117. {  
  118.     daemon_proc = 1;        /* for our err_XXX() functions */ 
  119.     openlog(pname, LOG_PID, facility);  
  120. }  
  121.