美文网首页LinuxLinux学习之路
APUE读书笔记-18终端输入输出(8)

APUE读书笔记-18终端输入输出(8)

作者: QuietHeart | 来源:发表于2020-09-01 17:35 被阅读0次

    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 */
    }
    

    相关文章

      网友评论

        本文标题:APUE读书笔记-18终端输入输出(8)

        本文链接:https://www.haomeiwen.com/subject/capnjktx.html