#include #include #include #include #include char *ttyname(fd) int fd; { static char dev[] = "/dev"; struct stat st, dst; DIR *fp; struct dirent *d; static char name[NAME_MAX]; int noerr = errno; if (fstat(fd, &st) < 0) return 0; if (!isatty(fd)) { __set_errno(ENOTTY); return 0; } fp = opendir(dev); if (fp == 0) return 0; strcpy(name, dev); strcat(name, "/"); while ((d = readdir(fp)) != 0) { strcpy(name + sizeof(dev), d->d_name); if (stat(name, &dst) == 0 && st.st_dev == dst.st_dev && st.st_ino == dst.st_ino) { closedir(fp); __set_errno(noerr); return name; } } closedir(fp); __set_errno(noerr); return 0; }