home *** CD-ROM | disk | FTP | other *** search
- /*
- * ttyname(f): return "/dev/ttyXX" which the the name of the
- * tty belonging to file f.
- * NULL if it is not a tty
- */
-
- #define NULL 0
- #include <sys/types.h>
- #include <sys/dir.h>
- #include <sys/stat.h>
-
- static char dev[] = "/dev/";
- char *strcpy();
- char *strcat();
-
- char *
- ttyname(f)
- {
- struct stat fsb;
- struct stat tsb;
- struct direct db;
- static char rbuf[32];
- register df;
-
- if (isatty(f)==0)
- return(NULL);
- if (fstat(f, &fsb) < 0)
- return(NULL);
- if ((fsb.st_mode&S_IFMT) != S_IFCHR)
- return(NULL);
- if ((df = open(dev, 0)) < 0)
- return(NULL);
- while (read(df, (char *)&db, sizeof(db)) == sizeof(db)) {
- if (db.d_ino == 0)
- continue;
- if (db.d_ino != fsb.st_ino)
- continue;
- strcpy(rbuf, dev);
- strcat(rbuf, db.d_name);
- if (stat(rbuf, &tsb) < 0)
- continue;
- if (tsb.st_dev==fsb.st_dev && tsb.st_ino==fsb.st_ino) {
- close(df);
- return(rbuf);
- }
- }
- close(df);
- return(NULL);
- }
-