|
|
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.