⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ttyname.c

📁 linux下用PCMCIA无线网卡虚拟无线AP的程序源码
💻 C
字号:
#include <errno.h>#include <unistd.h>#include <string.h>#include <sys/stat.h>#include <dirent.h>static char * __check_dir_for_tty_match(char * dirname, struct stat *st){    DIR *fp;    struct stat dst;    struct dirent *d;    static char name[NAME_MAX];    fp = opendir(dirname);    if (fp == 0)	return 0;    strcpy(name, dirname);    strcat(name, "/");    while ((d = readdir(fp)) != 0) {	strcpy(name + strlen(dirname) + 1, d->d_name);	if (stat(name, &dst) == 0		&& st->st_dev == dst.st_dev && st->st_ino == dst.st_ino) {	    closedir(fp);	    return name;	}    }    closedir(fp);    return NULL;}/* This is a failly slow approach.  We do a linear search through * some directories looking for a match.  Yes this is lame.  But  * it should work, should be small, and will return names that match * what is on disk.   * * Another approach we could use would be to use the info in /proc/self/fd */char *ttyname(fd)int fd;{    char *the_name = NULL;    struct stat st;    int noerr = errno;    if (fstat(fd, &st) < 0)	return 0;    if (!isatty(fd)) {	noerr = ENOTTY;	goto cool_found_it;    }    /* Lets try /dev/vc first (be devfs compatible) */    if ( (the_name=__check_dir_for_tty_match("/dev/vc", &st))) 	goto cool_found_it;    /* Lets try /dev/tts next (be devfs compatible) */    if ( (the_name=__check_dir_for_tty_match("/dev/tts", &st))) 	goto cool_found_it;    /* Lets try /dev/pts next */    if ( (the_name=__check_dir_for_tty_match("/dev/pts", &st))) 	goto cool_found_it;    /* Lets try walking through /dev last */    if ( (the_name=__check_dir_for_tty_match("/dev", &st))) 	goto cool_found_it;cool_found_it:    __set_errno(noerr);    return the_name;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -