Suse下可以运行 但有两点不太明白,求兄弟们指点指点,谢谢!!!
不知道这个daemon_inetd()中这两个参数怎么使用 char *pname和int facility?
不知道用这个daemon_inetd()怎么把这个daemon_proc初始化?
- #include<sys/socket.h>
- #include<strings.h>
- #include<string.h>
- #include<stdio.h>
- #include<arpa/inet.h>
- #include<unistd.h>
- #include<stdlib.h>
- #include<syslog.h>
- #include<stdarg.h>
- #include<errno.h>
- #include<signal.h>
- #include<fcntl.h>
- #define SA struct sockaddr
- #define MAXLINE 4096
- #define MAXFD 64
- int daemon_proc; /* set nonzero by daemon_init() */
- static void err_doit(int errnoflag, int level, const char *fmt, va_list ap);
- void err_quit(const char *fmt, ...);
- void err_sys(const char *fmt, ...);
- void daemon_inetd(const char *pname, int facility);
- int
- main(int argc, char **argv)
- {
- int sockfd, n;
- char recvline[MAXLINE + 1];
- struct sockaddr_in servaddr;
- if (argc < 2)
- err_quit("usage: a.out <IPaddress>");
- if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
- err_sys("socket error");
- bzero(&servaddr, sizeof(servaddr));
- servaddr.sin_family = PF_INET;
- servaddr.sin_port = htons(1313); /* daytime server */
- if (inet_pton(PF_INET, argv[1], &servaddr.sin_addr) <= 0)
- err_quit("inet_pton error for %s", argv[1]);
- if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
- err_sys("connect error");
- while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
- recvline[n] = 0; /* null terminate */
- if (fputs(recvline, stdout) == EOF)
- err_sys("fputs error");
- }
- if (n < 0)
- err_sys("read error");
- exit(0);
- }
- /* Fatal error related to a system call.
- * Print a message and terminate. */
- void
- err_sys(const char *fmt, ...)
- {
- va_list ap;
- va_start(ap, fmt);
- err_doit(1, LOG_ERR, fmt, ap);
- va_end(ap);
- exit(1);
- }
- /* Fatal error unrelated to a system call.
- * Print a message and terminate. */
- void
- err_quit(const char *fmt, ...)
- {
- va_list ap;
- va_start(ap, fmt);
- err_doit(0, LOG_ERR, fmt, ap);
- va_end(ap);
- exit(1);
- }
- /* Print a message and return to caller.
- * Caller specifies "errnoflag" and "level". */
- static void
- err_doit(int errnoflag, int level, const char *fmt, va_list ap)
- {
- int errno_save, n;
- char buf[MAXLINE];
- errno_save = errno; /* value caller might want printed */
- #ifdef HAVE_VSNPRINTF
- vsnprintf(buf, sizeof(buf), fmt, ap); /* this is safe */
- #else
- vsprintf(buf, fmt, ap); /* this is not safe */
- #endif
- n = strlen(buf);
- if (errnoflag)
- snprintf(buf+n, sizeof(buf)-n, ": %s", strerror(errno_save));
- strcat(buf, "\n");
- if (daemon_proc) {
- syslog(level, buf);
- } else {
- fflush(stdout); /* in case stdout and stderr are the same */
- fputs(buf, stderr);
- fflush(stderr);
- }
- return;
- }
- void
- daemon_inetd(const char *pname, int facility)
- {
- daemon_proc = 1; /* for our err_XXX() functions */
- openlog(pname, LOG_PID, facility);
- }