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

📄 calld.h

📁 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 + -