⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calld.h

📁 unix高级编程源代码.<<unix高级编程>>
💻 H
字号:
#include	<sys/types.h>
#include	<errno.h>
#include	<signal.h>
#include	"ourhdr.h"

#define	CS_CALL	"/home/stevens/calld"	/* well-known name */
#define	CL_CALL	"call"
#define	MAXSYSNAME	256
#define	MAXSPEEDSTR	256
#define	NALLOC	10				/* #structs to alloc/realloc for */
			/* Client structs (client.c), Lock structs (lock.c) */
#define	WHITE		" \t\n"				/* for separating tokens */
#define	SYSTEMS		"./Systems"			/* my own copies for now */
#define	DEVICES		"./Devices"
#define	DIALERS		"./Dialers"

			/* declare global variables */
extern int		 clifd;
extern int		 debug;		/* nonzero if interactive (not daemon) */
extern int		 Debug;		/* nonzero for dialing debug output */
extern char		 errmsg[];	/* error message string to return to client */
extern char		*speed;		/* speed (actually "class") to use */
extern char		*sysname;	/* name of system to call */
extern uid_t 	 uid;		/* client's uid */
extern volatile sig_atomic_t		chld_flag;	/* when SIGCHLD occurs */
extern enum parity { NONE, EVEN, ODD } parity;	/* specified by client */

typedef struct {		/* one Client struct per connected client */
  int	fd;			/* fd, or -1 if available */
  pid_t	pid;		/* child pid while dialing */
  uid_t	uid;		/* client's user ID */
  int	childdone;	/* nonzero when SIGCHLD from dialing child recvd:
					   1 means exit(0), 2 means exit(1) */
  long	sysftell;	/* next line to read in Systems file */
  long	foundone;	/* true if we find a matching sysfile entry */
  int	Debug;				/* option from client */
  enum parity parity;		/* option from client */
  char	speed[MAXSPEEDSTR];	/* option from client */
  char	sysname[MAXSYSNAME];/* option from client */
} Client;

extern Client	*client;	/* ptr to malloc'ed array of Client structs */
extern int		 client_size;/* # entries in client[] array */
					/* (both manipulated by client_XXX() functions) */

typedef struct {		/* everything for one entry in Systems file */
  char	*name;		/* system name */
  char	*time;		/* (e.g., "Any") time to call (ignored) */
  char	*type;		/* (e.g., "ACU") or system name if direct connect */
  char	*class;		/* (e.g., "9600") speed */
  char	*phone;		/* phone number or "-" if direct connect */
  char	*login;		/* uucp login chat (ignored) */
} Systems;

typedef struct {		/* everything for one entry in Devices file */
  char	*type;		/* (e.g., "ACU") matched by type in Systems */
  char	*line;		/* (e.g., "cua0") without preceding "/dev/" */
  char	*line2;		/* (ignored) */
  char	*class;		/* matched by class in Systems */
  char	*dialer;	/* name of dialer in Dialers */
} Devices;

typedef struct {		/* everything for one entry in Dialers file */
  char	*dialer;	/* matched by dialer in Devices */
  char	*sub;		/* phone number substitution string (ignored) */
  char	*expsend;	/* expect/send chat */
} Dialers;

extern Systems	systems;	/* filled in by sys_next() */
extern Devices	devices;	/* filled in by dev_next() */
extern Dialers	dialers;	/* filled in by dial_next() */

				/* our function prototypes */
void	 child_dial(Client *);					/* childdial.c */

int		 cli_args(int, char **);				/* cliargs.c */

int		 client_add(int, uid_t);				/* client.c */
void	 client_del(int);
void	 client_sigchld(pid_t, int);

void	 loop(void);							/* loop.c */

char	*ctl_str(char);							/* ctlstr.c */

int		 dev_find(Devices *, const Systems *);	/* devfile.c */
int		 dev_next(Devices *);
void	 dev_rew(void);

int		 dial_find(Dialers *, const Devices *);	/* dialfile.c */
int		 dial_next(Dialers *);
void	 dial_rew(void);

int		 expect_str(int, char *);				/* expectstr.c */

int		 request(Client *);						/* request.c */

int		 send_str(int, char *, char *, int);	/* sendstr.c */

void	 sig_chld(int);							/* sigchld.c */

long	 sys_next(Systems *);					/* sysfile.c */
void	 sys_posn(long);
void	 sys_rew(void);

int		 tty_open(char *, char *, enum parity, int);	/* ttyopen.c */

int		 tty_dial(int, char *, char *, char *, char *);	/* ttydial.c */

pid_t	 is_locked(char *);						/* lock.c */
void	 lock_set(char *, pid_t);
void	 lock_rel(pid_t);

void	 DEBUG(char *, ...);					/* debug.c */
void	 DEBUG_NONL(char *, ...);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -