Initial lp.
This commit is contained in:
parent
2863ba101f
commit
262ecfed9f
8 changed files with 1647 additions and 0 deletions
57
src/cmd/lp/LOCK.c
Normal file
57
src/cmd/lp/LOCK.c
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
|
||||
/* MAXHOSTNAMELEN is in sys/param.h */
|
||||
#define MAXHOSTNAMELEN 64
|
||||
|
||||
char lockstring[MAXHOSTNAMELEN+8];
|
||||
|
||||
void
|
||||
main(int argc, char *argv[]) {
|
||||
char *lockfile;
|
||||
int fd, ppid, ssize;
|
||||
struct Dir *statbuf;
|
||||
|
||||
if (argc != 4) {
|
||||
fprint(2, "usage: LOCK lockfile hostname ppid\n");
|
||||
exits("lock failed on usage");
|
||||
}
|
||||
lockfile = argv[1];
|
||||
if ((fd=create(lockfile, OLOCK|ORDWR, 0666)) < 0) {
|
||||
exits("lock failed on create");
|
||||
}
|
||||
ppid = atoi(argv[3]);
|
||||
ssize = sprint(lockstring, "%s %s\n", argv[2], argv[3]);
|
||||
if (write(fd, lockstring, ssize) != ssize) {
|
||||
fprint(2, "LOCK:write(): %r\n");
|
||||
exits("lock failed on write to lockfile");
|
||||
}
|
||||
|
||||
switch(fork()) {
|
||||
default:
|
||||
exits("");
|
||||
case 0:
|
||||
break;
|
||||
case -1:
|
||||
fprint(2, "LOCK:fork(): %r\n");
|
||||
exits("lock failed on fork");
|
||||
}
|
||||
|
||||
for(;;) {
|
||||
statbuf = dirfstat(fd);
|
||||
if(statbuf == nil)
|
||||
break;
|
||||
if (statbuf->length == 0){
|
||||
free(statbuf);
|
||||
break;
|
||||
}
|
||||
free(statbuf);
|
||||
if (write(fd, "", 0) < 0)
|
||||
break;
|
||||
sleep(3000);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
postnote(PNGROUP, ppid, "kill");
|
||||
exits("");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue