|
|
1.1 ! root 1: /* ! 2: * Type tty name ! 3: */ ! 4: #include <stdio.h> ! 5: #include <sys/types.h> ! 6: #include <sys/stat.h> ! 7: ! 8: char *ttyname(); ! 9: char *Xttyname(); ! 10: int sts; ! 11: ! 12: main(argc, argv) ! 13: char **argv; ! 14: { ! 15: register char *p; ! 16: ! 17: p = Xttyname(0); ! 18: if (!(argc==2 && strcmp(argv[1], "-s") == 0)) ! 19: printf("%s\n", (p? p: "not a tty")); ! 20: exit(sts); ! 21: } ! 22: ! 23: char * ! 24: Xttyname(fd) ! 25: int fd; ! 26: { ! 27: struct stat st; ! 28: static char buf[20]; ! 29: char *p; ! 30: ! 31: sts = 0; ! 32: if ((p = ttyname(fd)) != NULL) ! 33: return (p); ! 34: sts = 1; ! 35: if (fstat(fd, &st) < 0) ! 36: return (NULL); ! 37: if (st.st_nlink != 0) /* hack -- is it a pipe? */ ! 38: return (NULL); ! 39: sts = 2; ! 40: sprintf(buf, "nameless pipe/p%04x", st.st_ino); ! 41: return (buf); ! 42: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.