APUE读书笔记-18终端输入输出(8)
2020-09-01 本文已影响0人
QuietHeart
9、终端标识
控制终端
根据以前,大多数版本的UNIX 系统上面的控制终端的名称都是/dev/tty。POSIX.1提供了一个运行时的函数,我们可以通过调用这个函数来确定控制终端的名字。
#include <stdio.h>
char *ctermid(char *ptr);
返回:如果成功,返回指向控制终端名字的指针;如果错误返回空的字符串。
如果ptr非空,那么会假定它指向一个至少有L_ctermid字节的数组,而进程的控制终端的名字就存放在那个数组中。常数L_ctermid定义在<stdio.h>中。如果ptr是一个空指针,那么函数会为这个数组分配一个空间(这个空间通常都是一个静态变量)。同样地,进程的控制终端的名字会存放在这个数组中。
对于这两种情况,数组的起始地址都会被做为函数的返回值返回。由于大多数的UNIX系统使用/dev/tty作为控制终端的名字,所以这个函数只是为了便于在其它操作系统可移植的一种手段。
本书描述的所有四个平台,都会在我们调用ctermid的时候返回"dev/tty"的。
ctermid函数的例子
下面的代码展示了POSIX.1的ctermid函数的实现
需要注意的是我们不会保护调用者的缓存越界,因为我们无法确定它的大小。
POSIX.1中的ctermid函数的实现
#include <stdio.h>
#include <string.h>
static char ctermid_name[L_ctermid];
char * ctermid(char *str)
{
if (str == NULL)
str = ctermid_name;
return(strcpy(str, "/dev/tty")); /* strcpy() returns str */
}