专题 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 |
立刻返回 |
转载于:https://my.oschina.net/fuyajun1983cn/blog/263915
专题 7 设备文件编程相关推荐
- 专题5 低级文件编程
1. 文件的打开与创建 1.1 函数原型 #include <fcntl.h> int open(const char *filename, int oflag, -/*[ ...
- 专题 6 目录文件编程
1. 对目录文件的操作包括创建.打开.定位和删除等内容, 其中 (1) 获取工作目录的函数有getcwd和getwd等. (2) 设置工作目录的函数有chdir和f ...
- linux文件编程(2)——系统文件描述符、动静态文件、块设备介绍
参考:linux文件编程(2)--文件操作原理简述之文件描述符.动静态文件.块设备 作者:丶PURSUING 发布时间: 2021-04-09 11:14:12 网址:https://blog.csd ...
- linux文件编程(1)—— open、write、read、lseek、阻塞问题
参考:linux文件编程(1)-- 常用API之open.write.read.lseek 作者:丶PURSUING 发布时间: 2021-04-08 22:19:28 网址:https://blog ...
- linux文件编程(open、write、read、creat、lseek函数)
文件编程内容比较多,如文件系统原理及访问机制文件在内核中的管理机制,什么是文件信息节点iNode.文件共享.文件权限.各种用户对其权限等等.以下主要记录如何用代码操作文件,实现文件的创建.打开.编辑等 ...
- input子系统基础之按键2——input设备应用层编程实践
以下内容源于朱有鹏<物联网大讲堂>课程的学习,如有侵权,请告知删除. 一.input设备应用层编程实践1 1.确定设备文件名 (1)应用层操作驱动有2条路:/dev目录下的设备文件,/sy ...
- 字符设备驱动高级篇3——自动创建字符设备驱动的设备文件
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.问题描述 使用mknod创建设备文件的缺点: 能否自动生成和删除设备文件: 2.解决方案:udev(嵌入式中用 ...
- 设备文件BSP及嵌入式驱动开发笔记
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! BSP及嵌入式驱动开辟笔记 第一讲嵌入式系统基本概念 以应用为中央,以计算机 ...
- 3种字符设备驱动编程
目录 1 杂项字符设备 核心结构体 操作函数 杂项字符设备注册应用 2 早期经典方式注册 操作函数 经典设备注册应用 3 Linux2.6字符设备 核心结构体 操作函数 Linux2.6设备注册应用 ...
最新文章
- java的标记接口_Java中的标记接口?
- catia 如何提取cgr面_CATIA 创成式外形设计精品课程
- Android UncaughtExceptionHandler 全局异常监控
- python import
- Unicode 和 UTF-8 有什么区别?
- 暴雪帝国辉煌能否延续
- javaweb(05):tomcat服务器的安装、启动,IDEA整合Tomcat创建动态web工程
- es6,es7,es8语法总结
- Seesharp EasyChartX 常用属性
- CSS常用定位方法(绝对定位、相对定位、固定定位)
- 程序员为什么更容易掉头发?
- Facebook,Twitter,Linkedin分享
- typescript 高阶类型 Exclude 和 Extract
- html如何固定字号,css怎么控制字体大小?
- 360cdn能挡住cc攻击_云防CDN是网页CC攻击的克星?cdn集群防御
- python中write函数%啥意思_python write( )函数
- 线性表的创建和基本操作
- C++实现简易图书馆管理系统
- 关闭potplayer播放器屏幕大量信息
- 蓝桥杯重点(C/C++)(随时更新,更新时间:2023.2.9)
热门文章
- JsCV Core v0.2发布 Javascript图像处理系列目录
- 解决 DNS general: warning: *** POKED TIMER ***
- linux 命令详解 二十二
- Spring Cloud构建微服务架构-服务网关
- ZAM 3D入门教程(5):Lathe编辑器
- Hyper-V虚拟机快照占用磁盘空间过多,导致虚拟机不能启动怎么办
- SDWebImage 最新版详解
- 全面接入「人脸识别」,智慧城市公共服务的另一种思路
- 手动编写第一个javaWEB文件
- Windows 7各版本主要区别