1. 设备文件操作
UNIX对设备文件的操作相对简单,一般分为打开设备文件、设置设备文件、读写设备文件和关闭设备文件等几部分。
代码示例如下:
fd = open(devname, O_RDWR);//打开设备文件
ioctl(fd, TCGETA, &oldtty);//备份设备文件设置
ioctl(fd, TCSETA, &newtty);//设置设备文件设置
……………………………
read(fd, buf, len);//循环设备文件读写
write(fd, buf, len);
……………………………..
ioctl(fd, TCSETA, &oldtty);//恢复设备文件的设置
close(fd);
ioctl函数原型:
int ioctl(int fileds, int cmd, …/*args*/);
PS:函数ioctl对文件描述符对应的设备文件进行各种控制命令,参数cmd确定了执行的具体命令,并且决定了第三个参数arg的类型:arg一般为指针类型,cmd命令决定了它是为函数传递数据还是从函数中获取数据。
PS:当使用ioctl设置设备属性时,务必养成先保存,再恢复的习惯。
2. 终端设备
2.1 结构体termio定义
struct termio
{
unsigned short c_iflag; /*终端输入方式*/
unsigned short c_oflag; /*终端输出方式*/
unsigned short c_cflag; /*终端控制方式*/
unsigned short c_lflag; /*行规则模式*/
char c_line;
unsigned char c_cc[NCC]; /*控制字符*/
}
2.2 输入方式
实例:设置输入属性为:忽略Break输入,换行自动变回车,大写字母不自动转换为小写。
struct termio new;
………………….
new.c_iflag |= INLCR | IGNBRK;
new.c_iflag &= ~IUCLC;
PS:当设置终端属性时,使用按位或(“|”);当取消属性时,逻辑反(“~”)后使用按位与(“&”);
2.3 终端输出方式
实例:设置终端输出属性为:字符处理后输出,换行自动变换成回车换行,小写字母不自动转换为小写。
struct termio new;
……………………
new.c_oflag |= POPST | ONLCR;
new.c_oflag &= ~OLCUC;
2.4 终端控制方式
实例:设置终端的波特率为38400,字节长度为7bit。
struct termio new;
…………………
new.c_cflag &= ~(B9600 | CS8);
new.c_cflag |= (B38400 | CS7);
2.5 行规则模式
描述终端的行规则,可选择终端输入模式:标准模式(有缓冲)和原始模式(无缓冲)
2.6 控制字符
字符数据成员记录了一组字符控制信息,其中最常见的控制字符是c_cc[VMIN]和字符c_cc[VTIME]。VMIN:表示原始模式下读取字符的个数。VTIME:标志了原始模式下每次读取字符的时间,单位为0.1秒。
VMIN VTIME 描述 >0 >0 读入VMIN个字符,或者时间超出VTIME后返回 =0 >0 读入字符,或者时间操作VTIME后返回 >0 =0 直到读入VMIN个字符后返回 =0 =0 立刻返回
8748

被折叠的 条评论
为什么被折叠?



