资源描述
(一) 设备文件概述
分成3类:
字符设备;
块设备;
网络接口;
主设备号:同一种类型的设备;
从设备号:使用相同设备的不同设备。例如,/dev/hda1; /dev/hda2
vfs层提供了统一的访问接口。包括read,write等操作。
mknode /dev/newchar c 123 0
用户进程
|
文件系统
|
设备驱动程序
|
设备控制器
|
硬件
设备控制器:ide,usb控制器,usb控制器,myrinet网卡
设备的地址空间:内存接口,pci接口,IO地址
(二) 终端设备:tty
传统的终端设备:键盘+控制器+显示器,没有cpu单元和内存单元
1. 串行端口设备:/dev/ttyS0==com0,/dev/ttyS1,com1,com2
可以串口做实验
2. 伪终端:/dev/pts/n
master和slave设备,
telnet Server ---login --- pty ---ttyp(从设备) <---- 远程telnet客户端
控制终端: /dev/ttyN,tty1—tty7是实际的终端,tty0是当前控制终端,
例,在securecrt上,cat >/dev/tty0,在当前控制终端上有显示;
3. 控制台终端: console=/dev/ttyS0
说明:
(1) ps –au 命令显示哪些进程运行在哪个终端上;
(2) 进程 –> 终端 –> 键盘, 把程序和输入设备隔开。
(3) 只能向前台进程组发信号;守护进程不受终端的控制;
(4) 进程的工作环境包括:环境变量表,工作目录,打开的文件,控制终端
(5) /dev/tty, cat >/dev/tty
(6) ->getty à login -> sh -> .profile(配置文件)
命令:
stty –a 终端的设置信息
reset:重置把终端恢复到正常状态。
例子:显示终端的标准输入,标准输出,标准错误的名字.
P6.1.C
tcgetattr函数和tcsetattr函数
tcflag_t c_iflag; /* input modes */
tcflag_t c_oflag; /* output modes */
tcflag_t c_cflag; /* control modes */
tcflag_t c_lflag; /* local modes */
cc_t c_cc[NCCS]; /* control chars */
option.c_lflag设定模式
规范模式,面向行的输入方式,输入字符被放入用于和用户交互可以编辑的缓冲区内,直接到读入回车或者换行符号时才结束。
option.c_lflag |= (ICANON | ECHO | ECHOE);
ICANON:Enable canonical mode. This enables the special characters EOF, EOL, EOL2, ERASE, KILL,LNEXT, REPRINT, STATUS, and WERASE, and buffers by lines.
ECHOE: ICANON生效时,ECHOE为1,使能
If ICANON is also set, the ERASE character erases the preceding input character, and WERASE erases the preceding word
原始输入模式 原始输入模式是没有处理过的,当接收数据时,输入的字符在它们被接收后立即被传送,使用原始输入模式时候,一般可以选择取消ICANON,ECHO,ECHOE和选项。
option.c_lflag &= ~(ICANON | ECHO | ECHOE);
示例2,修改控制终端的属性
p6.2.c
示例3,解决密码的回显问题
set_disp_mode(STDIN_FILENO,0); ///0是关闭回显
#define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL) ///设定显示标志
例子:
(三) 串口通讯:
每秒波特率:57600bit,每秒钟采样57600Hz。
数据位:通常是8位
奇偶校验:0
停止位:1bits
软硬流控都设置为0
打开串口,使用O_NOCTTY
cfsetispeed:设置串口的波特率
int cfsetispeed(struct termios *termios_p, speed_t speed);
从man cfsetispeed中,可以看到的常见的波特率信息
设置数据位设置的技巧:
作业:通过串口读写;
(四)环境变量
name=”xiejun”
echo $name;
unset name;
export 出来的环境变量,是可被子进程继承的。
展开阅读全文