1 #ifndef lint 2 static char sccsid[] = "@(#)startdaemon.c 4.7 (Berkeley) 07/17/83"; 3 #endif 4 5 /* 6 * Tell the printer daemon that there are new files in the spool directory. 7 */ 8 9 #include <stdio.h> 10 #include <sys/types.h> 11 #include <sys/socket.h> 12 #include <sys/un.h> 13 #include "lp.local.h" 14 15 startdaemon(printer) 16 char *printer; 17 { 18 struct sockaddr_un sun; 19 register int s, n; 20 char buf[BUFSIZ]; 21 22 s = socket(AF_UNIX, SOCK_STREAM, 0); 23 if (s < 0) { 24 perr("socket"); 25 return(0); 26 } 27 sun.sun_family = AF_UNIX; 28 strcpy(sun.sun_path, SOCKETNAME); 29 if (connect(s, &sun, strlen(sun.sun_path) + 2) < 0) { 30 perr("connect"); 31 (void) close(s); 32 return(0); 33 } 34 (void) sprintf(buf, "\1%s\n", printer); 35 n = strlen(buf); 36 if (write(s, buf, n) != n) { 37 perr("write"); 38 (void) close(s); 39 return(0); 40 } 41 if (read(s, buf, 1) == 1) { 42 if (buf[0] == '\0') { /* everything is OK */ 43 (void) close(s); 44 return(1); 45 } 46 putchar(buf[0]); 47 } 48 while ((n = read(s, buf, sizeof(buf))) > 0) 49 fwrite(buf, 1, n, stdout); 50 (void) close(s); 51 return(0); 52 } 53 54 static 55 perr(msg) 56 char *msg; 57 { 58 extern char *name; 59 extern int sys_nerr; 60 extern char *sys_errlist[]; 61 extern int errno; 62 63 printf("%s: %s: ", name, msg); 64 fputs(errno < sys_nerr ? sys_errlist[errno] : "Unknown error" , stdout); 65 putchar('\n'); 66 } 67