UNIX-LINUX编程实践教程笔记:5 学习stty

1、设备就像文件
    对unix来说,声卡、终端、鼠标和磁盘文件是同一种对象。在unix系统中,每个设备都被当做一个文件。每个设备都有一个文件名、一个i-节点号、一个文件所有者、一个权限位的集合和最近修改时间。文件有关的所有内容都将运用于终端和其他的设备。
 
2、设备具有文件名
    每个加载到unix机器的设备(终端、打印机、鼠标、磁盘)都通过文件名表示。表示设备的文件名存放在目录/dev
    ls /dev
 
    lp * 文件是打印机
    fd * 文件是软驱
    sd * 文件旬scsi设备的分区
    /dev/tape磁带备份驱动程序
    tty * 文件是终端
    dsp文件是到声卡的一个连接
    dsp声卡  进程通过向该设备文件写入字节来运行一个声音文件
    /dev/mouse 进程通过打开文件来读取鼠标的单击和位置的变化
 
3、设备和系统调用
    设备不仅具有文件名,而且支持所有文件相关的操作 open read write lseek close stat
    
    命令tty 告知用户所在终端的文件名
    tty
    who > /dev/pts/2
    ls -li /dev/pts/2
 
4、设备文件属性
    ls -li /dev/pts/2
    5 crw--w----. 1 mis tty 136, 2 Oct 24 10:46 /dev/pts/2
    拥有i-节点5 ,权限位为crw--w----,1个链接,文件所有者bruce和组tty,最近修改时间
 
    设备文件和文件大小
    常用的磁盘文件由字节组成,磁盘文件中的字节数就是文件的大小。设备文件是链接,而不是容器。
    设备文件的i-节点存储的是指向内核子程序的指针,而不是文件的大小和存储的列表。
    内核中传输设备数据的子程序被称为设备驱动程序。
 
    136, 2
    从终端进行数据传输的代码是在设备-进程表中编号为136的子程序。
    该程序接收一个整形参数。在/dev/pts/2中,参数是2
    136和2这二个数被称为设备的主设备号和从设备号。
    子设备号确定处理该设备实际的子程序,而从设备号被作为参数传输到该子程序。
 
    
 
5、磁盘连接的属性
    a)属性1 缓冲
    通过修改控制变量改变文件描述符的动作
    fcntl(int fd,int cmd)
 
    b)自动添加模式
    当文件描述符的O_APPEND位被开启后,每个对write的调用自动调用lseek将内容添加到文件的末尾。
    
#include <fcntl.h>
ins;
s = fcntl(fd,F_GETFL);
s |= O_APPEND;
result = fcntl(fd,F_SETFL,s);
if(result == -1)
    perror("setting APPEND);
else 
   write(fd,&rec,1)
    
    c)用open控制文件描述符
    O_SYNC    O_APPEND是文件描述符的二个属性,其他的属性将在后面的章节讨论。
    fcntl并不是仅有的用来设置文件描述符属性的方法,可以通过系统调用open的第二个参数的一部分设置文件描述符属性
    fd = open(WTMP_FILE,O_WRONLY | O_APPEND | O_SYNC);
 
    内核在磁盘和进程间传输数据。内核中进行这些传输的代码有很多选项。程序可以使用open fcntl系统调用控制这些数据传输的内部动作。
 
 
6、终端驱动程序
    处理进程和外部设备间数据流的内核子程序的集合被称为终端驱动程序或tty驱动程序。
    驱动程序程序包含很多控制设备操作的设置,进程可以读、修改和重置这些驱动控制。
 
    stty -all
    读取和修改终端驱动程序设置
    
 
    tcgetattr tcsetattr提供对终端驱动程序的访问
 

猜你喜欢

转载自hackxin.iteye.com/blog/1979468