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