收藏 分销(赏)

第六讲-连接控制:学习stty.ppt

上传人:a199****6536 文档编号:2404564 上传时间:2024-05-29 格式:PPT 页数:32 大小:431.50KB
下载 相关 举报
第六讲-连接控制:学习stty.ppt_第1页
第1页 / 共32页
第六讲-连接控制:学习stty.ppt_第2页
第2页 / 共32页
第六讲-连接控制:学习stty.ppt_第3页
第3页 / 共32页
第六讲-连接控制:学习stty.ppt_第4页
第4页 / 共32页
第六讲-连接控制:学习stty.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、第六讲 连接控制:学习stty1主要内容文件和设备间的相似之处文件和设备间的不同之处连接的属性竞争和原子操作控制设备驱动程序流2为设备编程计算机还有很多其它数据来源,例如调制解调器、打印机、扫描仪、终端等外部设备如何访问连接这些设备?与文件的方法有什么相同及不同之处?3设备与文件的相同之处可以从文件中读写数据可以从设备中读写数据,例如麦克风及声卡从键盘设备读取输入,向屏幕输出数据对Unix而言,声卡、终端、鼠标及磁盘文件是同一种对象Unix中,每个设备都被当做一个文件。每个设备都有一个文件名、一个i节点号、一个文件所有者、一个权限位的集合及最近修改时间4设备具有文件名表示设备的文件存放在目录/

2、dev中ls-C/dev|head-5上述结果显示了若干种设备,第三列中的lp*文件是打印机,第二列的fd*是软驱,sd*表示SCSI设备,最后一列的tty*代表文件终端。dsp文件是到声卡的一个连接。进程打开文件/dev/mouse读取鼠标的单击和位置变化5设备和系统调用设备也支持open、read、write、lseek、close及stat等系统调用例如,从磁带读取数据的代码:int fd;fd=open(“/dev/tape”,O_RDONLY);lseek(fd,(long)4096,SEEK_SET);n=read(fd,buf,buflen);close(fd);6终端就像文件U

3、nix的很多用户输入来自终端ttysd,ttyse等文件都代表终端终端可能是:键盘、屏幕、调制解调器、telnet窗口。其最重要功能:接受用户的字符输入和将信息显示给用户7终端就像文件命令tty可以告知用户所在终端的文件名tty/dev/pts/2cp/etc/passwd/dev/pts/2who /dev/pts/2ls li/dev/pts/28设备文件的属性设备文件具有磁盘文件大部分属性例如/dev/pts/2文件拥有i节点、权限位,链接数、文件所有者和组tty、最近修改时间、文件类型等。文件类型c表示为字符型设备9设备文件和文件大小设备文件是链接而不是容器设备文件的i节点存储的是指向

4、内核子程序的指针而不是文件大小和存储列表内核中传输设备数据的子程序被称为设备驱动程序/dev/pst/2 文件中的参数136为进程表中编号为136的子程序,该子程序接收一个整型参数2。这个参数被称为从设备号。10设备文件和权限位权限位的写表示允许向设备发送数据读表示允许从设备读取数据11设备与文件的不同之处终端具有回显、波特率、编辑和换行会话与磁盘文件的连接通常具有内核缓冲区到终端的连接则不同,进程需要尽快把终端的数据传送出去。一般情况下,所输入的字符对会显示在屏幕上,但有些时候,当输入密码时,字符并不回显在屏幕上。回显字符不是键盘任务的一部分,也不是程序应该做的回显是连接的一个属性,到磁盘文

5、件的连接没有这些属性。12磁盘连接的属性属性1:缓冲可以通过修改文件描述符中的相关变量进行设置,步骤如下:1.生成系统调用将控制变量从文件描述符复制到进程2.修改该控制变量3.将修改过的值送回内核,代码如下:#include int s=fcntl(fd,F_GETFL);s|=O_SYNCresult=fcntl(fd,F_SETFL);if (result=-1)perror(“setting sync”);13fcntl系统调用文件描述符的属性编码在一个整形数据中通过fcntl调用读写该整数位来控制文件描述符O_SYNC 告诉内核,对write的调用仅能在数据写入实际的硬件时才能返回而不

6、是在数据复制到内核缓冲时执行默认的返回操作14fcntl目标控制文件描述符头文件 函数原型int res=fcntl(int fd,int cmd);int res=fcntl(int fd,int cmd,long args);int res=fcntl(int fd,int cmd,struct flock*lockp);参数fd 文件描述符 cmd需要执行的操作arg操作的参数 lock 锁信息返回值-1遇到错误other依操作而定15属性2:自动添加模式自动添加模式对于若干个进程同一时间写入文件是很有用的考虑wtmp文件,它存储所有的登录和退出记录。当一个用户登录和退出时,程序logi

7、n在其中末尾追加记录。用如下的代码将数据添加到文件:lseek(fd,0,SEEK_END);write(fd,&rec,len);16上述代码的问题用户A登录用户B登录时间lseek(fd,0,SEEK_END)lseek(fd,0,SEEK_END)1234write()write()17Unix是一个分时系统,这个过程需要两个独立的步骤lseek和write时间1:B的登录进程定位文件的末尾时间2:B的时间片用完,A的登录进程定位文件的末尾时间3:A的时间片用完,B的登录进程写入记录时间4:B的时间片用完,A的登录进程写入记录产生竞争现象,A的记录被B的记录所覆盖18原因分析lseek和

8、write调用是独立的系统调用,内核可随时打断进程,从而使其被中断如果设置O_APPEND标志位,则内核将lseek和write组合成原子操作,被组合为不可分割的单元19解决方法:用open控制文件描述符通常在打开一个文件时,应该知道要怎么设置通过open系统调用的第二个参数的一部分来设置文件描述符的属性位。例如:fd=open(WTMP_FILE,O_WRONLY|O_APPEND|O_SYNC)可以通过open创建一个包含O_CREAT标志位的文件,例如:fd=creat(filename,permission_bits);fd=open(filename,O_CREAT|O_TRUNC|

9、O_WRONLY,permission_bits)是等价的20其它标志位O_CREATO_TRUNCO_EXCL:防止多个进程同时创建同名文件,如果文件存在且O_EXCL被置位,则返回-121终端连接的属性实验一:#include main()int c,n=0;while(c=getchar()!=Q)printf(char%3d is%c code%dn,n+,c,c);22程序执行的结果输入hello显示结果:char 0 is h code 104char 1 is e code 101char 2 is l code 108char 3 is l code 108char 4 is

10、o code 111char 5 is code 10Q23执行结果的分析进程在用户输入了Return后才接收数据进程将用户输入的Return(ASCII码13)看做换行符(ASCII码10)进程发送换行符,终端接收回车换行符程序发送n,但是显示器收到的为rn用户输入r,但是程序接收到n24终端驱动程序处理进程和外部设备间数据流的内核子程序的集合进程可读、修改和重置这些驱动控制标志stty命令可让用户读取和修改终端驱动程序的设置输入命令stty输入命令stty-all25终端驱动程序stty rease Xstty-echostty erase echo26编写终端驱动程序输入:驱动程序如何处

11、理终端来的字符输出:如何处理流向终端的字符控制:字符如何被表示-位的个数、位的奇偶性、停止位等。本地:如何处理来自驱动程序内部的字符27编写终端驱动程序从驱动程序获得属性修改所要修改的熟悉将修改过的属性送回驱动程序,例如#include struct termios attribs;tcgetattr(fd,&settings);settings.c_lflag|=ECHO;tcsetattr(fd,TCSANOW,&settings)28相关函数调用目标读取tty驱动程序的属性头文件 函数原型int res=tcgetattr(int fd,struct termios*info)参数fd

12、文件描述符info 指向终端结构的指针返回值-1遇到错误0成功返回29目标设置tty驱动程序的属性头文件 函数原型int res=tcsetattr(int fd,int when,struct termios*info)参数fd 文件描述符when 改变设置的时间info 指向终端结构的指针返回值-1遇到错误0成功返回30when参数TCSCNOW:立即更新驱动程序设置TCSADRAIN:等待直到驱动程序队列中的所有输出都被送到终端,然后进行更新TCSAFLUSH:等待直到驱动程序队列中的所有输出都被送出去,然后释放所有队列中的输入数据,并进行一定的变化31struct termios结构类型struct termios tcflag_t c_iflag;/输入模式 tcflag_t c_oflag;/输出模式 tcflag_t c_cflag;/控制模式 tcflag_t c_lflag;/本地模式 cc_t c_ccNCCS;/控制字符 speed_t c_ispeed;/输入速度 speed_t c_ospeed;/输出速度32

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服