LinuxLinux学习之路

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 */
}
上一篇下一篇

猜你喜欢

热点阅读