123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #include <errno.h>
- #include <unistd.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <dirent.h>
- 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;
- }
|