1*6715Smckusick /* @(#)ttyname.c 4.3 (Berkeley) 05/07/82 */ 21994Swnj /* 31994Swnj * ttyname(f): return "/dev/ttyXX" which the the name of the 41994Swnj * tty belonging to file f. 51994Swnj * NULL if it is not a tty 61994Swnj */ 71994Swnj 81994Swnj #define NULL 0 96371Smckusick #include <sys/param.h> 10*6715Smckusick #include <sys/dir.h> 111994Swnj #include <sys/stat.h> 121994Swnj 131994Swnj static char dev[] = "/dev/"; 141994Swnj char *strcpy(); 151994Swnj char *strcat(); 161994Swnj 171994Swnj char * 181994Swnj ttyname(f) 191994Swnj { 201994Swnj struct stat fsb; 211994Swnj struct stat tsb; 226371Smckusick register struct direct *db; 236371Smckusick register DIR *df; 241994Swnj static char rbuf[32]; 251994Swnj 261994Swnj if (isatty(f)==0) 271994Swnj return(NULL); 281994Swnj if (fstat(f, &fsb) < 0) 291994Swnj return(NULL); 301994Swnj if ((fsb.st_mode&S_IFMT) != S_IFCHR) 311994Swnj return(NULL); 326371Smckusick if ((df = opendir(dev)) == NULL) 331994Swnj return(NULL); 346371Smckusick while ((db = readdir(df)) != NULL) { 356371Smckusick if (db->d_ino != fsb.st_ino) 361994Swnj continue; 371994Swnj strcpy(rbuf, dev); 386371Smckusick strcat(rbuf, db->d_name); 391994Swnj if (stat(rbuf, &tsb) < 0) 401994Swnj continue; 416371Smckusick if (tsb.st_dev == fsb.st_dev && tsb.st_ino == fsb.st_ino) { 426371Smckusick closedir(df); 431994Swnj return(rbuf); 441994Swnj } 451994Swnj } 466371Smckusick closedir(df); 471994Swnj return(NULL); 481994Swnj } 49