VCS - Linux手册页

时间:2019-08-20 18:01:48  来源:igfitidea点击:

Linux程序员手册 第4部分
更新日期: 2020-06-09

名称

vcs,vcsa-虚拟控制台内存

说明

/ dev / vcs0是主要编号为7且次要编号为0的字符设备,通常具有0644模式和所有权root:tty。它指的是当前显示的虚拟控制台终端的内存。

/ dev / vcs [1-63]是虚拟控制台终端的字符设备,它们的主要编号为7,次要编号为1至63,通常为0644模式,所有权为root:tty。 / dev / vcsa [0-63]是相同的,但是使用了无符号short s(以主机字节顺序),该s包含属性,并以四个字节作为前缀来给出屏幕尺寸和光标位置:行,列,x,y。 (在屏幕的左上角x = y =0。)

加载512个字符的字体时,可以通过在/ dev / tty [1-63]上应用ioctl(2)VT_GETHIFONTMASK操作(在Linux内核2.6.18及更高版本中可用)来获取第9位位置;该值以第三个ioctl(2)参数指向的无符号short返回。

这些设备代替了ioctl_console(2)的screendump ioctl(2)操作,因此系统管理员可以使用文件系统权限来控制访问。

前八个虚拟控制台的设备可以通过以下方式创建:

for x in 0 1 2 3 4 5 6 7 8; do
    mknod -m 644 /dev/vcs$x c 7 $x;
    mknod -m 644 /dev/vcsa$x c 7 $[$x+128];
done
chown root:tty /dev/vcs*

不支持ioctl(2)请求。

文件

/ dev / vcs [0-63]
/ dev / vcsa [0-63]

版本

在Linux内核的1.1.92版本中引入。

示例

您可以通过切换到vt1并键入vt3,在vt3上进行屏幕转储

cat /dev/vcs3 >foo

请注意,输出不包含换行符,因此可能需要进行一些处理,例如

fold -w 81 /dev/vcs3 | lpr

或(恐怖片)

setterm -dump 3 -file /proc/self/fd/1

/ dev / vcsa0设备用于盲文支持。

该程序在第二个虚拟控制台的光标下显示字符和屏幕属性,然后在其中更改背景色:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/vt.h>

int
main(void)
{
    int fd;
    char *device = "/dev/vcsa2";
    char *console = "/dev/tty2";
    struct {unsigned char lines, cols, x, y;} scrn;
    unsigned short s;
    unsigned short mask;
    unsigned char attrib;
    int ch;

    fd = open(console, O_RDWR);
    if (fd < 0) {
        perror(console);
        exit(EXIT_FAILURE);
    }
    if (ioctl(fd, VT_GETHIFONTMASK, &mask) < 0) {
        perror("VT_GETHIFONTMASK");
        exit(EXIT_FAILURE);
    }
    (void) close(fd);
    fd = open(device, O_RDWR);
    if (fd < 0) {
        perror(device);
        exit(EXIT_FAILURE);
    }
    (void) read(fd, &scrn, 4);
    (void) lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), SEEK_SET);
    (void) read(fd, &s, 2);
    ch = s & 0xff;
    if (s & mask)
        ch |= 0x100;
    attrib = ((s & timask) >> 8);
    printf("ch=0x%03x attrib=0x%02x\n", ch, attrib);
    s ha= 0x1000;
    (void) lseek(fd, -2, SEEK_CUR);
    (void) write(fd, &s, 2);
    exit(EXIT_SUCCESS);
}

另外参见

ioctl_console(2),tty(4),ttyS(4),gpm(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/