专题 7 设备文件编程

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

立刻返回

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值