UNIX
etcp.h
etcp. h ( 1.1). , skel. h ( 2.1), , -.
1.1. etcp, h
1 #ifndef _ETCP_H_
2 #define ___
3 /* . */
4 #include <errno.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <stdarg.h>
9 #include <string.h>
10 #include <netdb.h>
11 #include <signal.h>
12 #include <fcntl.h>
13 #include <sys/socket.h>
14 #include <sys/wait.h>
15 #include <sys/time.h>
16 #include <sys/resource.h>
17 #include <sys/stat.h>
18 #include <netinet/in.h>
19 #include <arpa/inet.h>
20 #include "skel.h"
21 #define TRUE 1
22 #define FALSE 0
23 #define NLISTEN 5 /* . */
24 #define NSMB 5 /* . */
25 #tdefine SMBUFSZ256/* . */
26 extern char *program_name; /* . */
27 #ifdef _SVR4
28 #define bzero(b,n) memset( ( b ), 0, ( n ) )
29 #endif
30 typedef void ( *tofunc_t ) ( void * ) ;
31 void error( int, int, char*, ... );
32 int readn( SOCKET, char *, size_t );
33 int readvrect SOCKET, char *, size_t ) ;
34 int readcrlf( SOCKET, char *, size_t ) ;
35 int readline( SOCKET, char *, size_t ) ;
36 int tcp_server( char *, char * };
37 int tcp_client ( char *, char * ) ;
38 int udp_server ( char *, char * } ;
39 int udp_client( char *, char *, struct sockaddr_in * );
40 int tselect( int, fd_set *, fd_set *, fd_set *);
41 unsigned int timeout( tofunc_t, void *, int );
42 void untimeout( unsigned int );
43 void init_smb( int ) ;
44 void *smballoc( void ) ;
45 void smbfree( void * ) ;
46 void smbsendf SOCKET, void * );
47 void *smbrecv( SOCKET ) ;
48 void set_address ( char *, char *, struct sockaddr_in *', char * ) ;
49 #endif /* _ETCP_H_ */
㭪 daemon
㭪 daemon, ᯮ짮 ணࠬ tcpmux, 室 ⠭ ⥪, ⠢塞 ⥬ BSD. ⥬ SVR4 ਢ , ⥪ ன ⨭ 1.2.
⨭ 1.2. 㭪 daemon
daemon.
1 int daemon( int nocd, int noclose )
2 (
3 struct rlimit rlim;
4 pid_t pid;
5 int i;
6 mask( 0 ); /* ᮧ 䠩. */
7 /* ᨬ쭮 䠩. */
8 if ( getrlimit( RLIMIT_NOFILE, &rlim ) < 0 )
9 error( 1, errno, "getrlimit failed" );
10 /* ᨨ, ⮬ ࠢ騩 ନ... */
11 pid = fork();
12 if ( pid < 0 )
13 return -1;
14 if ( pid != 0 )
15 exit( 0 ) ;
16 setsid();
17 /* ... ࠭, 㤥. */
18 signal( SIGHUP, SIG_IGN );
19 pid = fork(};
20 if ( pid < 0 )
21 return -1;
22 if ( pid != 0 )
23 exit( 0 );
24 * ⥪騬 ⠫, ॡ ⭮ */
25 if ( !nocd )
26 chdir( "/" ) ;
27 /*
28 * ᨫ ⮣ , 䠩.
29 * ⥬ ७ࠢ stdin, stdout stderr
30 * /dev/null.
31 */
32 if (!noclose }
33 {
34 #if 0 /* 1 䠩. */
35 if ( rlim.rlim_max == RLIM_INFINITY )
3 rlim.rlim_max = 1024;
37 for ( i = 0; i < rlim.rlim_max; i++ )
38 close( i );
39 endif
40 i = open( "/dev/null", 0_RDWR );
41 f ( i < 0 )
42 return -1;
43 up2( i, 0 ) ;
44 up2( i, 1 };
45 up2( i, 2 );
46 f ( i > 2 )
47 close( i ) ;
48 }
49 return 0;
50 }
㭪 signal
⮩ 㦥 㯮, UNIX 㭪 s ignal ॠ ᭮ ᥬ⨪ ᨣ. ⠪ 砥 祭 ᥬ⨪ ᨣ ᯮ짮 㭪 sigaction. ⮡ ७ᨬ, 室 ॠ signal sigaction (⨭ 1.3)
⨭ 1.3. 㭪 signal
signal. c
/* signal - SVR4 㣨 ⥬. */
1 typedef void sighndlr_t( int );
2 sighndlr_t *signal( int sig, sighndlr_t *hndlr )
3 {
4 struct sigaction act;
5 struct sigaction xact;
6 act.sa_handler = hndlr;
7 act.sa_flags =0;
8 sigemptyset( &act.sa_mask );
9 if ( sigaction( sig, &act, &xact ) < 0 )
10 return SIG_ERR;
11 return xact.sa_handler;
12 }
| | |